Realloc dans fonction
nico
-
kazouu Messages postés 466 Statut Membre -
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?
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?
Configuration: Linux Firefox 3.0
11 réponses
-
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 ?
-
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 -
dans ton main a la sorti de lire_fic affiche nbint nbfloat et vérifie si les valeur sont correct
-
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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));
?? -
-
donc c'est ta fonction de copie, peux tu me la joindre je pense savoir ou tu fais l'erreur
-
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 -
mais tu fais le malloc après avoir rempli les tableau ????? o_O
ça ne sert strictement a rien -
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 -
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