[C] Init d1 Tableau dynamique en parametre...

Bonsoir,

Je souhaiterai savoir s'il est nécessaire, voire obligatoire, de faire les malloc pour allouer de l'espace mémoire pour un tab dyn à 2 dimensions dans le main ?

Ou bien puis-je simplement déclarer ce tableau ds le main puis lui allouer de l'espace mémoire ds une fonction ? ceci ne me fait-il pas perdre les données (et l'espace mémoire) du tab en sortant de la fonction ?

Comment faire ?

8 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    Que vaut taillefict alors si c'est correct.
    Car lorsque tu fais un malloc :

    char **tab;
    int nbCol=100;
    int nbLig = 10;
    int i;

    tab=(char**)malloc(nbCol*sizeof(char*));
    for(i=0;i<nbCol;i++)
    tab[i]=(char*)malloc(nbLig*sizeof(char));

    Je ne vois donc pas l'utilisation d'une autre variable dans cette partie.
    1. Contributeur
      Salut
      Si tu veux le faire passer en arguments :

      void init(char ***tab,int cmtp){
        *tab=(char **)malloc...
        for 
            (*tab)[i]=(char *)malloc
      
      }
      
      int main(){
      
      char**tab;
      
      init(&tab);
      return 0;
      }
      

      Voilà, bonne chance
      1. Contributeur
        Salut.
        Tu peux, et heureusement, allouer ton tableau dynamique ailleurs, comme dans une fonction. Tu ne perdras aucun élément.
        1. en es tu sûr ? :(

          car ma fonction d'affichage (séparée de la fonction de remplissage du tableau à 2 dim) ne fonctionne pas : erreur windows ; donc je pense qu'il n'arrive pas à acceder au tableau ...

          Je fais le
          char **TermTab;
          ds le main().

          Je fais les
          TermTab=(char**)malloc(cmptp*sizeof(char*));
          for(i=0;i<tailleficT;i++){
          TermTab[j]=(char*)malloc((cmptc+1)*sizeof(char));
          }
          dans la fonction : apartirdeTermFic(char ** TermTab,int cmptp);

          Je fais l'affichage :
          affichTerm(char ** TermTab, int cmptp){
              int i=0;
              printf("\nVoici le nombre de Terminaux : %d\n",cmptp);
              printf("\nVoici les terminaux :\n");
              for(i=0;i<cmptp;i++){
                  puts(TermTab[i]);
              }
          }
          Dans ma fonction affichage. Or elle plante ... pk ?
          1. Contributeur
            Pourrais-tu me donner ton main pour que je vois comment tu appelles les fonctions qui ont comme argument ton tableau.
            Sinon plusieurs trucs :
            TermTab=(char**)malloc(cmptp*sizeof(char*)); /*parfait, ;)*/
            for(i=0;i<tailleficT;i++){ /*^pourquoi taillefict ??? Mets plutôt cmptp*/
            TermTab[j]=(char*)malloc((cmptc+1)*sizeof(char)); /*C'est i qu'il faut mettre et pas j (peut etre erreur de frappe de ta part ;))*/
            }
            1. Merci pour ce que tu as corrigé mais c'est correct (j'en suis certain puisque ça marche et que ça me retourne le bon résultat ;) )

              Sinon, voici comment j'apelle les fonctions dans le main :
              apartirdeTermFic(TermTab,cmptp);

              et :
              affichTerm(TermTab,cmptp);


              Merci de ton aide à venir ...
              1. Puisque tu le demandes si gentiment (lol) :
                TermTab=(char**)malloc(cmptp*sizeof(char*));
                    for(i=0;i<tailleficT;i++){
                        if(TermTabInt[i]!=';'){
                            cmptc++;
                        }else{
                            TermTab[j]=(char*)malloc((cmptc+1)*sizeof(char));
                            for(k=0;k<cmptc;k++){
                                TermTab[j][k]=TermTabInt[MemCmpt+k];
                            }
                            TermTab[j][k]='\0';
                            MemCmpt=MemCmpt+cmptc+1;
                            cmptc=0;
                            j++;
                        }
                    }
                1. Contributeur
                  lol
                  Sinon tu peux faire :

                  char **init(int taille) {
                  les malloc sont ici
                  return tmp;
                  }

                  int main() {
                  char **tab;

                  tab=init(taille);

                  return 0;
                  }

                  J'espère que ça t'aidera
                  Bonne chance