c++ - std::map 和 _CrtIsValidHeapPointer 错误

标签 c++ stdmap

我尝试将 std::map 与

一起使用
class DEMO {
    public:
        DEMO();
        virtual ~DEMO();
        DEMO &operator =(const DEMO &d);
        DEMO(const DEMO& d);
        BYTE* Arr() const;
    private:
        BYTE *m_array;
};

DEMO &DEMO::operator =(const DEMO &d) {
    memcpy(m_array, d.Arr(), 1);
    return *this;
}

DEMO::DEMO(const DEMO& d) {
    //call operator=
    *this = d;
}

const BYTE* DEMO::Arr() const {
    return m_array;
}

DEMO::DEMO() {
    m_array = new BYTE[1];
    }

DEMO::~DEMO() {
    if (m_array != 0)
        delete [] m_array;
}

class MyClass {
    private:
        typedef map<unsigned int,DEMO> t_mapType;
        t_mapType m_map;
        void Test();
}

void MyClass::Test() {
    DEMO myDEMO;
    m_map[1] = myDEMO;
}

如果我在类中调用 Test(),我会收到错误断言 _CrtIsValidHeapPointer...
我检查了断点,我看到,在 assingment (m_map[1] = myDEMO;) 期间,DEMO 的析构函数被调用,我在删除 [] m_array; 时收到错误- 我如何让它运行?

最佳答案

复制构造函数和赋值运算符是错误的。在执行memcpy 之前,您需要为m_array 分配内存。当您尝试使用 m_map[1] = myDEMO;DEMO 对象插入到 map 中时;正在创建 myDEMO 的拷贝。要创建一个拷贝,可以使用 DEMO 类的复制构造函数。由于在执行此复制时未分配 m_array 的内存,因此 memcpy 调用崩溃。

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

相关文章:

c++ - 检查数字是否既不是素数也不是单个素数的幂的更好算法

c++ - std::map 默认值(仅移动类型)

c++ - 如何在 std::map 中使用结构?

c++ - std::map - 插入作为嵌套结构的主体

c++ - 显式析构函数

c++ - 如何在 C++ 中使用 cin.get() 提供更多数字?

c++ - 如何更改或删除 boost 序列化中的标签?

c++ - 将键移出 std::map<> &&

c++ - 使用不可复制(但可 move )键 move 分配 map 时出错

c++ - 为什么不能对具有析构函数的类进行 memcpy