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

Fermé
oliver91 Messages postés 51 Date d'inscription lundi 21 mai 2007 Statut Membre Dernière intervention 9 septembre 2009 - 22 mai 2007 à 19:15
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 23 mai 2007 à 10:18
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 ?
A voir également:

8 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
22 mai 2007 à 23:28
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
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
23 mai 2007 à 10:18
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
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
22 mai 2007 à 22:30
Salut.
Tu peux, et heureusement, allouer ton tableau dynamique ailleurs, comme dans une fonction. Tu ne perdras aucun élément.
0
oliver91 Messages postés 51 Date d'inscription lundi 21 mai 2007 Statut Membre Dernière intervention 9 septembre 2009 3
22 mai 2007 à 22:58
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
22 mai 2007 à 23:16
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
oliver91 Messages postés 51 Date d'inscription lundi 21 mai 2007 Statut Membre Dernière intervention 9 septembre 2009 3
22 mai 2007 à 23:25
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
oliver91 Messages postés 51 Date d'inscription lundi 21 mai 2007 Statut Membre Dernière intervention 9 septembre 2009 3
22 mai 2007 à 23:50
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
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
23 mai 2007 à 00:20
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