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

oliver91 Messages postés 52 Statut Membre -  
fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   -
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

  1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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
  2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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
  3. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Salut.
    Tu peux, et heureusement, allouer ton tableau dynamique ailleurs, comme dans une fonction. Tu ne perdras aucun élément.
    0
  4. oliver91 Messages postés 52 Statut Membre 3
     
    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 ?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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 ;))*/
    }
    0
  7. oliver91 Messages postés 52 Statut Membre 3
     
    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 ...
    0
  8. oliver91 Messages postés 52 Statut Membre 3
     
    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++;
            }
        }
    0
  9. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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
    0