我试图通过将对象的唯一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;
}
}
答案 0 :(得分:0)
我无法确定根本原因,但是,我能够通过将队列,flagObjectsToUpdate()和updateObject()放入类来解决内存泄漏。
我怀疑用户Jarod42说他在销毁队列对象之前发布了内存泄漏报告时是正确的。