我尝试将 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/