Prob tableau de pointeurs

Signaler
Messages postés
2
Date d'inscription
lundi 31 mars 2003
Statut
Membre
Dernière intervention
25 mai 2005
-
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
-
ben voila , j'ai un petit souci pour un prog que je dois réaliser pour
un cours. Il s'agit en fait d'un pendu, avec un dictionnaire contenu
dans un fichier texte. Aucune erreur de compilation mais bien une
erreur dans l'execution. En utilisant le debugger, je m'appercois que
c'est lorsque je vais rechercher les lignes dans le fichier texte et
les copies dans un tableau de poinbteur que ca bug. Pourriez vous
m'aider a trouver l'erreur ?

voici la fonction en question

j'ai mis en rouge la ou le debugger me dis que ca ne vas pas (acces
violation), le plus bizarre c que c vraiment en fin de boucle, lorsque
qu'il va chercher le dernier mot dans le fichier)



Merci bcp pr votre aide



char** creer_dico (int*n)

{



int i=0;

char **mot;

char ligne_fch[80];

FILE * pstream;

*n=0;

pstream=fopen("..\\dico.txt","rt");

do

{

fgets(ligne_fch,80,pstream);

if (!(feof(pstream)||ferror(pstream)))



*n=*n+1;

}

while (!(feof(pstream)||ferror(pstream)));



if (!feof(pstream))

printf("Erreur de lecture du fichier...\n");



mot=(char**)malloc((*n)*sizeof(char*));

rewind(pstream);

printf("%d",*n);



do

{



fgets(ligne_fch,80,pstream);

if (!(feof(pstream)||ferror(pstream)))



mot[i]=(char*)malloc((strlen(ligne_fch)+1)*sizeof(char));

if (mot[i]==NULL) printf ("erreur d'allocation");

strcpy(mot[i],ligne_fch); //c'est ici le probleme je pense

//printf("%s",mot[i]);

i++;

}





while (!(feof(pstream)||ferror(pstream)));

printf("\n");



if (!feof(pstream))

printf("Erreur de lecture du fichier...\n");

return (mot);

}

3 réponses

Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
Faudrait vérifier si 'i' ne dépasse pas 'n' par hazard (seule cause que je vois apparement).
Messages postés
224
Date d'inscription
mardi 12 août 2003
Statut
Membre
Dernière intervention
18 octobre 2010

en fin de boucle? c'est normal:
fgets(ligne_fch,80,pstream);
if (!(feof(pstream)||ferror(pstream)))
mot[i]=(char*)malloc((strlen(ligne_fch)+1)*sizeof(char));

le dernier mot n'est pas alloué puisque on arrive à la fin du fichier: ca plante.
essaye plutot avec while(!feof(pstream) au lieu de ton do/while
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
Exact, il faudrait au moins des {} pour le bloc du if

if (!(feof(pstream)||ferror(pstream)))
{
mot[i]=(char*)malloc((strlen(ligne_fch)+1)*sizeof(char));
if (mot[i]==NULL) printf ("erreur d'allocation");
strcpy(mot[i],ligne_fch); //c'est ici le probleme je pense
}