我正在使用 QtCreator 和 Valgrind 检查我的 Qt 程序中的内存泄漏。我正在我的析构函数中删除 QHash 中的一些条目,如下所示:
QHash<QString, QVariant*> m_Hash;
/**
* @brief
* Destruct a Foo Class instance
*/
Foo ::~Foo ()
{
// Do Cleanup here
// Delete hash leftovers
foreach( QString key, m_Hash.keys() )
{
qDebug() << "Deleting an entry..";
// Delete the hash item
delete m_Hash.take(key);
}
}
如果我使用 Valgrind 进行调试,则此代码很好,并在调用析构函数时删除内容:
>> Deleting an entry..
>> Deleting an entry..
如果我在 QtCreator 中使用 GDB 启动,从 QtCreator 不使用 GDB 启动,或者只是从命令行运行我的 Qt 应用程序,我会收到分段错误!
Signal name :
SIGSEGV
Signal meaning :
Segmentation fault
如果我推荐“删除”行,那么我可以使用任何方法很好地运行我的应用程序,但我确实会泄漏内存。
是什么赋予了?valgrind 是否会引入某种延迟以允许我的析构函数工作?我该如何解决这个问题?