我正在尝试将自定义对象添加到我的地图中,前提是它尚未存在。如果它存在,我正在调用一个函数,该函数将添加到我的自定义对象的现有缓冲区中。执行此函数时,我看到析构函数在CustomObject上被调用了两次,因此,第二次调用析构函数会导致"无效地址传递给free"问题。我是新来的地图,并会欣赏一些修复代码的技巧。我假设在地图上调用insert会生成myobject的副本,只要地图保持在范围内,它就会保留在范围内。
MyObject::MyObject():
mBuffer(nullptr)
{
}
MyObject:: ~MyObject()
{
free(mBuffer);
mBuffer = nullptr;
}
MyObject::Append(p_someData):
{
//Calls malloc on mbuffer and copies data from someData into mBuffer
}
void AnotherObject::AddResulttoMap(const p_otherobject *result,uint32_t index)
{
MyObject curObject;
if (mMyObjectsMap.find(index) == mMyObjectsMap.end())
{
curObject.Append(result->result);
mMyObjectsMap.insert(std::pair<uint32_t, MyObject >(index, curObject));
std::cout << "DEBUG: Writing new object for index" << unsigned(index) << std::endl;
}
else
{
curObject= mMyObjects.find(index)->second;
curObject.Append(result->result);
std::cout << "DEBUG: Appending into result for index" << unsigned(index) << std::endl;
}
}