Bonjour,

alors j'ai un petit probleme avec mes pointeurs et je comprend pas pk?


Bon je suis entrain de faire une GUI avec wxWidget, et je créer un arbre dynamiquement en lisant un fichier XML. Ma GUI permet aussi de supprimer une des feuilles de l'arbre. Cependant quand j'appelle: delete confXmlS400[ID_board]; j'obtiens une erreur de segmentation.

Pour mieux comprendre je vais copié les bouts de code important!

Déclarations:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
class S400Manager {
 
public:
void makeChildren();
void OnDeleteS400(wxCommandEvent& event);
 
private:
std::vector<wxWindow *> treeLeaf;
std::vector<wxXmlNode *> xmlChildNode;
}

Initialisation des object s400:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
S400Manager::makeChildren() {
     for(int i=0;i<childNode.size();i++) {
           ConfigXMLS400 *s400 = new ConfigXMLS400(treeLeaf[i],xmlChildNode[i]);
           S400Vec.push_back(s400);
     }
}

Suppression d'un ou plusieurs objet s400, l'index des objets a supprimer est contenu dans le tableau selIDVec .

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void S400Manager::OnDeleteS400(wxCommandEvent& event) {
	for(int i=0;i<selIDVec.size();i++) {
		int ID_board=selIDVec[i];
		//First delete the node from the tree
		confXmlS400[ID_board]->RemoveFromTree();
		//Then delete the XML node 
		node->RemoveChild(confXmlS400[ID_board]->getXmlNode());
 
	       //Delete the object pointed by the vector
		delete confXmlS400[ID_board]; #Cette ligne me provoque une segmentation fault 
 
		//and set the corresponding pointer to NULL
		confXmlS400[ID_board] = NULL;
		//Print in the log that this panel has been deleted
		wxLogMessage(_T("Remove Board #%d"),ID_board);
	}
 
	//Delete all the vector which are equal to NULL
	for(int i=0;i<confXmlS400.size();i++) {
		if(confXmlS400[i]==NULL) {
			confXmlS400.erase(confXmlS400.begin()+i);
		}
	}
}
Si qqun peux m'expliquer pk ca ne marche pas je serais content.

PS: Encore une petite question, si mon object s400Manager est detruit, celui-ci appel automatiquement les destructeur de mes objets s400 contenu dans le vecteur ou faut il que je face un appel explicit par delete dans le destructeur de s400Manager??