Vaut-il mieux faire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Noms * liste_personne[32];
Ou plutôt :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 class Noms { char * m_nom[32]; ... void SetNom(int i, char * nom) { m_nom[i] = (char*)malloc(_tcslen(nom) * sizeof(char)); sprintf(m_nom[i], nom); } };
Dans la première solution, j'ai des raisons de penser qu'au fur et à mesure que l'on créé les personnes et que l'on rempli les noms dynamiquement, il est possible que l'allocation empiète sur les pointeurs (c possible ça ?). C'est la seule explication que j'ai. Ainsi, lorsque je fait:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 class Noms { char * m_nom[32]; ... void SetNom(int i, char * nom) { m_nom[i] = nom; } };
L'appel des méthodes SetNom() semble allouer de la mémoire sur laquelle est le pointeur vers liste_personne suivant (liste_personne[1] ici puis les autres...), et donc j'obtiens un zoli plantage.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 liste_personne[0] = new Noms(); liste_personne[0]->SetNom(0, "toto"); liste_personne[0]->SetNom(1, "tata"); ... liste_personne[1] = new Noms(); liste_personne[1]->SetNom(0, "titi"); liste_personne[1]->SetNom(1, "tutu"); ...
Dans la 2ème solution (classe), faire pointer mes pointeurs directement vers les chaines passées en paramètres ne semble pas très "propres" puisque qu'il s'agit (a priori) de chaines de caractères temporaires (je pense) qui seraient donc effacées si la mémoire le decidait.
Que faire ?
Partager