Realloc dans fonction

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

  • Votes
  • Date
  • Date décroissante
  1. 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
    1. 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
      1. mais tu fais le malloc après avoir rempli les tableau ????? o_O
        ça ne sert strictement a rien
        1. 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
          1. donc c'est ta fonction de copie, peux tu me la joindre je pense savoir ou tu fais l'erreur
            1. oui c'est fait aussi
              je l'ai déclaré avant
              float* tabfloat;
              int* tabint;
              1. 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));

                ??
                1. dans ton main a la sorti de lire_fic affiche nbint nbfloat et vérifie si les valeur sont correct
                  1. 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
                    1. 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 ?