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?
Configuration: Linux
Firefox 3.0

11 réponses

  1. 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
  2. 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
  3. 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
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. 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
  6. nico
     
    oui c'est fait aussi
    je l'ai déclaré avant
    float* tabfloat;
    int* tabint;
    0
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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