gpt4 book ai didi

c++ - SqlConnection 的 executeAndWait 导致 BB10 上的内存泄漏

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

当我调用 executeAndWait 并且就在回复返回时,我看到堆内存增加了 76KB。我不知道为什么会这样。我该如何清理这段内存?我与数据库的连接创建如下,

bool DBHelper::checkConnection(bool isAsynch)
{
if(sqlConnector && dbFile->exists())
{
return true;
}
if (dbFile->exists())
{
sqlConnector = new SqlConnection(dbPath, "connect");
connect(sqlConnector, SIGNAL(reply(const bb::data::DataAccessReply&)), this,
SLOT(onLoadAsyncResultData(const bb::data::DataAccessReply&)));
return true;
}
return false;
}

executeAndWait 的调用在这个函数中,

void DBHelper::execute (const QVariant &criteria,int id,bool isAsynch)
{
if (checkConnection(isAsynch))
{
if(!isAsynch)
{
DataAccessReply reply= sqlConnector->executeAndWait(criteria, id); // memory leak happens when the reply is found.
this->onLoadSynchResultData(reply);
}

}
}

文档链接在 here.

谢谢。

最佳答案

您确定这是内存泄漏而不是 DataAccessReply 类的某种内部机制吗?您是否尝试过使用 valgrind 或类似工具检查它?

根据您使用 new 进行的分配和后续分配,我推测 sqlConnector 的类型是指向某物的指针。虽然它可能不是您正在寻找的解决方案,但我建议使用一些智能指针类型,因为它们总是更防漏。

如果有兴趣,请参阅 e。 G。 boost::shared_ptr或 C++11 std::shared_ptr根据您可用的内容。

另外(在这里叫我 Nerd )我不会使用 if(sqlConnector),即使它可能通过隐式转换做你期望的事情。我会明确地使用 if(sqlConnector != NULL)(或类似的东西)并仔细检查 sqlConnector 是否(也明确地)正确初始化。

关于c++ - SqlConnection 的 executeAndWait 导致 BB10 上的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18629532/

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