SqlConnection的executeAndWait导致BB10上的内存泄漏

时间:2013-09-05 06:47:50

标签: c++ sqlite memory-leaks blackberry-10 sqlconnection

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

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.

感谢。

1 个答案:

答案 0 :(得分:1)

你确定它是内存泄漏而不是DataAccessReply类的内部机制吗?你试过用valgrind或类似的工具来解决它吗?

通过使用new和随后的赋值来分配,我假设sqlConnector的类型是指向某事物的指针。虽然它可能不是您正在寻找的解决方案,但我建议使用一些智能指针类型,因为它们总是更加防漏。

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

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