gpt4 book ai didi

c++ - Qt delete 适用于 Valgrind 但不能正常执行

转载 作者:太空宇宙 更新时间:2023-11-04 15:24:00 25 4
gpt4 key购买 nike

我正在使用 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 启动,在没有 GDB 的情况下从 QtCreator 启动,或者只是从命令行运行我的 Qt 应用程序,我会遇到段错误!

Signal name : 
SIGSEGV
Signal meaning :
Segmentation fault

如果我推荐“删除”行,那么我可以使用任何方法正常运行我的应用程序,但我确实会泄漏内存。

什么给了? valgrind 是否引入了某种允许我的析构函数工作的延迟?我该如何解决这个问题?

最佳答案

海德的回答是正确的;但是,清除特定哈希值的最简单方法如下:

#include <QtAlgorithms>

Foo::~Foo()
{
qDeleteAll(m_Hash);
m_Hash.clear();
}

请注意,如果哈希表的键是指针(例如 QHash<QString*, QVariant> ),则上述技术将不起作用。

关于c++ - Qt delete 适用于 Valgrind 但不能正常执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13235062/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com