1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| class MaClasse : public QWidget /* ou n'importe quelle classe dérivée de QWidget*/
{
public:
MaClasse();
~MaClasse();
private:
QVBoxLayout * tempLayout;
};
MaClasse::MaClasse():QWidget(){
tempLayout = new QVBoxLayout;
/* ... */
setLayout(tempLayout);
}
MaClass:: ~MaClass(){
delete tempLayout; //CRACK
}
int main(){
MaClass obj;
/* ... */
return 0;
} // BOUM : obj est détruit ici.
// Le destructeur de MaClasse est appelé, delete est invoqué sur tempLayout
// le destructeur de QWidget est appelé ensuite, mais il invoque delete
// sur le pointeur qui correspond (en interne) à tempLayout
// ==> tentative de libérer deux fois la mémoire allouée à tempLayout
// --> comportement indéfini --> erreur de segmentation |