2013-05-17 73 views
-3

我必須刪除構件**對象的**object**personnel)作爲內部的構件(組合物)另一個目的,我想以釋放存儲器**personnel指向並指向另一**temppersonnel=temp),沒有delete荷蘭國際集團**personnel,只是做personnel=temp程序運行良好,但如果我想delete **personnel它攪亂了一切,我總是得到一個錯誤「_Block_Type_Is_Valid (pHead->nBlockUse)C++,如何(使用刪除)

(我的析構函數(和virtual基地析構函數) ,他們中的一些什麼都不做,但我仍然得到錯誤)。 (我試過delete personnel[i]delete []personnel[i]和等,從各個角度))

(失去了對這個數天)

難道我做錯了什麼,甚至有權delete它,如果是這樣,怎麼辦我這麼做?

編輯:

if(personnel!=NULL) 
    { 
     for(i=0;i<numberofemployees;i++) 
     { **/*what to do here*/** 

    delete []this->personnel[i]; 

     } 
     /*delete personnel;*/ 

    } 
    personnel=temp; 
    numberofemployees++; 

    } 

**人員是在這個類中的一員, (員工**人員,員工是一個基類派生的其他類, 各類員工,我使用多態), 這個功能只是爲了增加一個員工, 這個功能很長,這就是爲什麼我只放了它的一部分, 我希望你能理解我, 如果我不刪除看來一切正常,否則我會斷言錯誤,

+1

刪除有地址的作品。所以如果你想刪除一些東西,把它傳給一個地址。 'ptr **'是存儲另一個地址的內存位置的地址。你想刪除哪一個? – RandyGaul

+1

你能給一個代碼示例嗎? – edtheprogrammerguy

回答

1

我不確定我是否理解這個問題。但是,根據我的瞭解,如果您有:

struct Foo { ... }; 
Foo* foo = new Foo; 
Foo** bar = &foo; 

然後你只需要delete foodelete *bar(呼叫那些只有一個)。

但是,您通常不希望跟蹤類似的東西,而應考慮使用智能指針,如std::shared_ptrstd::unique_ptr