gpt4 book ai didi

c++ - std::map 分配错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:54:43 25 4
gpt4 key购买 nike

我遇到了 std::map 的问题。由于未知原因,有时插入映射会导致“错误分配”异常。

下面是我用来插入 map 的函数。

BOOL Add2WaitList(Object<LPVOID> *newObj)
{
try
{
_set_se_translator( trans_func );
m_syncWQ.Lock();
if (m_waitingQueue.count(newObj->uid)>0)
{
m_syncWQ.Unlock();
return FALSE;
}
m_waitingQueue[newObj->uid] = *newObj; <-- failing here
m_syncWQ.Unlock();
return TRUE;
}
catch(std::exception &ex){
...
}
catch(SE_Exception &e){
...
}
catch(...){
...
}
}

谁能告诉我如何解决这个问题?

注意:我无法确定重现它的步骤。

提前致谢!

添加有关对象和 map 的详细信息:

template <typename T>
struct Object{
public:
void Kill()
{
if (response!=NULL)
delete response;
if (object!=NULL)
delete object;
}

enum objType;
std::string uid;
enum status;
double p;
enum execType;
T object;
LPVOID response;
};

std::map<std::string,Object<LPVOID>> m_waitingQueue;

最佳答案

很明显是 std::map 操作导致了问题

m_waitingQueue[newObj->uid] = *newObj;

它实际上是一个映射插入操作,可能会在后台分配内存:How is a STL map allocated? Stack or Heap? .一个可能的原因是分配内存导致错误分配异常:Bad allocation exceptions in C++ .

但是这段代码本身并不能解释幕后发生的事情。我认为需要更多与“m_waitingQueue”相关的信息,因为该变量是全局变量,可以在此函数之外执行任何操作。

关于c++ - std::map 分配错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17741057/

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