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

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