将uint32_t添加到其他名称空间中的队列时发生内存泄漏

时间:2019-01-31 23:01:55

标签: c++ memory-leaks

我试图通过将对象的唯一ID号推入数据库名称空间内的队列来标记对象以用于名称空间“ api”中的数据库更新。这也是通过名称空间“数据库”中的flagObjectToUpdate函数完成的。

在使用cppUTest测试以下代码时,我发现了很多内存泄漏,我完全被这会导致泄漏的原因所困扰。通过注释掉调用堆栈中的所有其他代码行,我将其范围缩小到下面的代码。

谁能提供一些见识?

namespace api
{
    uint32_t setObjVal(uint32_t objNumber, uint32_t objVal, uint32_t source)
    {
        // set object values
        if(source == EXTERNAL_WRITE)
            dataBase::flagObjectsToUpdate(objNumber);
        return result;
    }
}

namespace database
{
    std::queue<uint32_t> objNumQueue;

    void flagObjectsToUpdate(uint32_t objNumber)
    {
        objNumQueue.push(objNumber);
    }

    uint32_t updateObject(void)
    {
        uint32_t objNum;
        while(!objNumQueue.empty())
        {
            objNum = objNumQueue.front();
            objNumQueue.pop();
            //update objects       
        }
        return result;
    }
}

1 个答案:

答案 0 :(得分:0)

我无法确定根本原因,但是,我能够通过将队列,flagObjectsToUpdate()和updateObject()放入类来解决内存泄漏。

我怀疑用户Jarod42说他在销毁队列对象之前发布了内存泄漏报告时是正确的。