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

标签 c++ stdmap bad-alloc

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

相关文章:

C++:警告:有符号和无符号表达式(Gmake、freebsd)

c++ - std::map 如何确保所有指针都为空?

python - 如何使用 Boost.Python 使用带有 std::map 或 std::vector 参数的构造函数来包装 C++ 类?

c++ - 为什么我可以在 main() 之前通过 std::map 填充变量?

c++ - 向 std::vector 添加结构时的 std::bad_alloc

c++ - 有没有什么方法可以使用显卡(除了 CUDA 和 OpenCL)?

c++ - Multipe Send( )'s and Recv()' s 使用 Winsock2

时间:2019-03-17 标签:c++STLmin_element

c++ - std::bad_alloc 运行时异常

c++ - 如何解决 bad alloc() 运行时错误?