Realloc dans fonction

Fermé
nico - 16 juin 2008 à 08:58
kazouu Messages postés 466 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 24 juillet 2008 - 16 juin 2008 à 10:48
Bonjour,
je cherche à copier le contenu d'un fichier dans deux tableaux

void lire_fic(int* tabint,float* tabfloat,int* nbfloat,int* nbint)
{
//je fais un realloc, je lis dans un fichier
//jusque là ca marche
}


dans le main je fais un
lire_fic(tabint,tabfloat,&nbint,&nbfloat);

ca me marque erreur de segmentation, normal j'essaye de travailler sur les 2 tableaux

et si je fais
tabfloat=(float*)malloc(nbfloat*sizeof(float));
tabint=(int*)malloc(nbint*sizeof(int));

y'a plus d'erreur mais c'est plus le même tableau que celui retourné par la fonction donc il me met que des 0 dans les 2 tableaux.
est-ce que quelqu'un sait comment faire?

11 réponses

kazouu Messages postés 466 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 24 juillet 2008 12
16 juin 2008 à 09:33
tout d'abord si tu as une erreur de segmentation , en général ça vient d'un débordement de mémoire donc tu dois surement vouloir écrire dans une place du tableau non alloué , vérifie les valeurs de &nbint &nbfloat, puis ensuite ta fonction de copie doit faire un transtypage peux tu nous la montrer ?
0
en fait j'ai fait un

int main()
{
int nbint=0;
int nbfloat=0;
lire_fic(tabint,tabfloat,&nbint,&nbfloat);
tabfloat=(float*)malloc(nbfloat*sizeof(float));
tabint=(int*)malloc(nbint*sizeof(int));
...
}

dans lire_fic(int* tabint,float* tabfloat,int* nbfloat,int* nbint)
{
FILE *fic;

char* ligne;

fic = fopen (source, "r");

char** ptr=NULL;
char** ptr1=NULL;
ptr = (char **)malloc(sizeof(char *)*2);
char* str;

int lengthfloat=0;
int lengthint=0;

*nbint=0;
*nbfloat=0;
int taille=0;

float f;

//si le fichier est trouve

if (fic)

{

int i=0;
int f=0;
ligne=(char*)malloc(256*sizeof(char));

while (fgets(ligne,256,fic)!= NULL) {

if(ligne!=NULL)
{
ptr1=split(ligne," ",0);
if(!strcmp(ptr1[0],"float")) {
*nbfloat=*nbfloat+1;
} else if(!strcmp(ptr1[0],"int")) {
*nbint=*nbint+1;
}
}

}
printf("int=%d\n",*nbint);
printf("float=%d\n",*nbfloat);
tabfloat=(float*)realloc(tabfloat,*nbfloat*sizeof(float));
tabint=(int*)realloc(tabint,*nbint*sizeof(int));
close(fic);
fic = fopen (source, "r");
while (fgets(ligne,256,fic)!= NULL)

{

if(ligne!=NULL)

{

ptr=split(ligne,"=",0);

ptr1=split(ptr[0]," ",0);
if(!strcmp(ptr1[0],"float")) {
tabfloat[f]=atof(ptr[1]);
printf("%f\n",tabfloat[f]);
f++;
}else {
tabint[i]=atoi(ptr[1]);
printf("%d\n",tabint[i]);
i++;
}
}

taille++;

}

}

close(fic);
}


voilà, c'est tou ce que je fais
0
kazouu Messages postés 466 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 24 juillet 2008 12
16 juin 2008 à 09:59
dans ton main a la sorti de lire_fic affiche nbint nbfloat et vérifie si les valeur sont correct
0
c'est les bonnes valeurs
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kazouu Messages postés 466 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 24 juillet 2008 12
16 juin 2008 à 10:09
c'est une erreur de copie :
tabfloat=(float*)malloc(nbfloat*sizeof(float));

tu as bien mit

float* tabfloat=(float*)malloc(nbfloat*sizeof(float));
int *tabint=(int*)malloc(nbint*sizeof(int));

??
0
oui c'est fait aussi
je l'ai déclaré avant
float* tabfloat;
int* tabint;
0
kazouu Messages postés 466 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 24 juillet 2008 12
16 juin 2008 à 10:33
donc c'est ta fonction de copie, peux tu me la joindre je pense savoir ou tu fais l'erreur
0
je l'ai mise
c'est la fonction lire_fic

d'abord je lis après je copie

pour info nbint et nbfloat était dans le desordre mais ca change rien au probleme
0
kazouu Messages postés 466 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 24 juillet 2008 12
16 juin 2008 à 10:40
mais tu fais le malloc après avoir rempli les tableau ????? o_O
ça ne sert strictement a rien
0
ah oui tien
ah force de reflechir et de changer des morceaux de programmes
j'écris des trucs absurdes

c'était juste ca ma faute apparemment
merci bien pour ton aide
0
kazouu Messages postés 466 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 24 juillet 2008 12
16 juin 2008 à 10:48
sans probleme,
dans l'ordre tu fais :

- demande des valeur a l'utilisateur
- tu fais tes 2 malloc
- et tu rempli les tableau en faisant attention si les 2 tailles ne sont pas égales
0