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 .
Si qqun peux m'expliquer pk ca ne marche pas je serais content.
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); } } }
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??
Partager