我有一个小型的C++程序,我创建了一个Person
类的两个对象。该课程有char *m_szFirstName
和char *m_szLastName
数据。当它被删除之前删除内存
然后我分配一个对象到另一个对象,导致对象的数据成员指向相同的位置。
在析构函数中,我删除了为第一个对象分配的内存并将NULL
值分配给指针。像这样的东西。
if (m_szFirstName!= NULL)
{
delete [] m_szFirstName;
m_szFirstName = NULL;
}
然后,当我去删除第二个对象的内存,为NULL
检查不工作,当我删除的记忆,我得到一个崩溃。从调试器,它显示我的指针不是NULL
。它有0xfeee
。
我知道内存已被删除,不应删除。但是,我不知道如何检查是否应该删除内存。
你能展示一些代码吗? – cnicutar 2012-02-17 07:15:38
当你复制你的Person实例时,第二个对象拥有**自己的**成员。也就是说,它有自己的'm_szFirstName',它的值是从原始实例复制的。请注意,只有指针被复制,而不是指向的内存**。所以当你在删除第一个实例后将第一个实例设置为NULL时,第二个实例将保留它的值并指向“已删除”的内存。 – ereOn 2012-02-17 07:34:32
代码太大,无法在此处添加。我想示范你不能将一个对象(用char *数据)分配给另一个对象,除非你拒绝赋值操作符并在其中做一个拷贝。否则,两个对象的数据将指向相同的内存。当第一个对象被删除时,第二个对象数据将有损坏的数据。 – 2012-02-19 18:10:24