Erreur de segmentation et signal aboutToQuit
Bonjour,
J'ai un segmentation fault à l'appel de la méthode quit() de mon QApplication personnalisé.
Voici un exemple minimaliste qui le reproduit :
Code:
1 2 3 4 5
| int main(int argc, char *argv[])
{
CApplication a(argc, argv);
return a.exec();
} |
Code:
1 2 3 4 5
| CApplication::CApplication(int& argc, char** argv) :
QApplication(argc, argv)
{
pModule = new Module(this); // QApplication est parent du module
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| Module::Module(QObject *parent) :
QObject(parent)
{
w = new MainWindow();
w->show();
}
Module::~Module()
{
if (w)
{
delete w; // Seg fault ici
w = NULL;
}
} |
Voici la pile :
Citation:
0 Module::~Module module.cpp 13 0x4024dd
1 Module::~Module module.cpp 18 0x402565
2 QObjectPrivate::deleteChildren qobject.cpp 1841 0x6b942187
3 QObject::~QObject qobject.cpp 934 0x6b940b49
4 QCoreApplication::~QCoreApplication qcoreapplication.cpp 754 0x6b91b7c5
5 QGuiApplication::~QGuiApplication qguiapplication.cpp 499 0x2108c6d
6 QApplication::~QApplication qapplication.cpp 685 0x9996797
7 CApplication::~CApplication capplication.h 8 0x409332
8 qMain main.cpp 6 0x401625
9 WinMain@16 qtmain_win.cpp 131 0x403e7d
10 main 0x40a5fd
J'ai trouvé une solution qui consiste à appeler un méthode pour détruire le module sur un signal aboutToQuit() de l'application :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| CApplication::CApplication(int& argc, char** argv) :
QApplication(argc, argv)
{
pModule = new Module(this);
QObject::connect(this, SIGNAL(aboutToQuit()),
this, SLOT(clean()));
}
void CApplication::clean()
{
if (pModule)
{
delete pModule;
pModule = NULL;
}
} |
Ce qui m'ennuie, c'est que je ne sais pas bien l'expliquer..
Une idée ? :-)
Merci!