我遇到了 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/