Realloc dans fonction

nico -  
kazouu Messages postés 466 Statut Membre -
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?
A voir également:

11 réponses

kazouu Messages postés 466 Statut Membre 12
 
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
nico
 
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 Statut Membre 12
 
dans ton main a la sorti de lire_fic affiche nbint nbfloat et vérifie si les valeur sont correct
0
nico
 
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 Statut Membre 12
 
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
nico
 
oui c'est fait aussi
je l'ai déclaré avant
float* tabfloat;
int* tabint;
0
kazouu Messages postés 466 Statut Membre 12
 
donc c'est ta fonction de copie, peux tu me la joindre je pense savoir ou tu fais l'erreur
0
nico
 
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 Statut Membre 12
 
mais tu fais le malloc après avoir rempli les tableau ????? o_O
ça ne sert strictement a rien
0
nico
 
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 Statut Membre 12
 
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