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