Allocation dynamique dans un sous programme
Résolu
CherryBlondy
Messages postés
16
Date d'inscription
Statut
Membre
Dernière intervention
-
CherryBlondy Messages postés 16 Date d'inscription Statut Membre Dernière intervention -
CherryBlondy Messages postés 16 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Allocation dynamique dans un sous programme
- Tableau croisé dynamique - Guide
- Comment mettre en veille un programme sous windows 10 - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
- Programme demarrage windows 10 - Guide
- Exemple tableau croisé dynamique télécharger - Télécharger - Tableur
1 réponse
Salut,
J'ai pas tout lu mais il y a déjà une chose qui m'interpelle.
Si tu comptes modifier le pointeur terrain. Effectivement il faut passer par un pointeur sur la matrice donc ici, un triple pointeur. Par contre l'appel à la fonction est faux. Mets plutôt :
Ce qui signifie que tu envoies l'adresse du pointeur sur la matrice terrain. Et là tu pourras allouer le pointeur.
Pour la fonction d'initialisation,
suffira. Tu ne modifies pas le pointeur mais les cases de la matrice. Donc pas besoin d'un pointeur sur le pointeur de la matrice.
Et l'appel devient tout simplement :
Sinon, je n'ai pas vu les free, dans ton code. N'oublie pas de le faire, sinon tu auras des fuites mémoires.
Et enfin je t'ai vu utiliser : fflush(stdin);, et bien, cela ne doit pas être utilisé. La fonction fflush() à un comportement indéfini sur les entrées. Il faut utiliser à la place :
Cdlt
J'ai pas tout lu mais il y a déjà une chose qui m'interpelle.
char **terrain; //déclaration de terrain tailleterrain(&*terrain, &hauteur, &largeur); //appel void tailleterrain(char ***table, int *hauteur, int *largeur); //prototype
Si tu comptes modifier le pointeur terrain. Effectivement il faut passer par un pointeur sur la matrice donc ici, un triple pointeur. Par contre l'appel à la fonction est faux. Mets plutôt :
tailleterrain(&terrain, &hauteur, &largeur);
Ce qui signifie que tu envoies l'adresse du pointeur sur la matrice terrain. Et là tu pourras allouer le pointeur.
Pour la fonction d'initialisation,
void initialterrain(char **terrain,int hauteur,int largeur)
suffira. Tu ne modifies pas le pointeur mais les cases de la matrice. Donc pas besoin d'un pointeur sur le pointeur de la matrice.
Et l'appel devient tout simplement :
initialterrain(terrain, hauteur, largeur);
Sinon, je n'ai pas vu les free, dans ton code. N'oublie pas de le faire, sinon tu auras des fuites mémoires.
Et enfin je t'ai vu utiliser : fflush(stdin);, et bien, cela ne doit pas être utilisé. La fonction fflush() à un comportement indéfini sur les entrées. Il faut utiliser à la place :
int c; while((c=getchar())!='\n' && c!=EOF);
Cdlt
et merci encore =)
bonne soirée