我有一個小型的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