[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 -
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 ?
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
-
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. -
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 -
Salut.
Tu peux, et heureusement, allouer ton tableau dynamique ailleurs, comme dans une fonction. Tu ne perdras aucun élément. -
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 lechar **TermTab;
ds le main().
Je fais lesTermTab=(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 ? -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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 ;))*/
} -
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 ... -
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++; } } -
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