gpt4 book ai didi

c++ - 将 uint32_t 添加到不同命名空间中的队列时发生内存泄漏

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

我试图通过将对象的唯一 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;
}
}

最佳答案

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

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

关于c++ - 将 uint32_t 添加到不同命名空间中的队列时发生内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54470530/

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