2013-02-25 53 views
1

奇怪的錯誤於是我找來了A類和B類,其中A類是基類B類的但是當我做這樣的事情:上刪除可變

int main() 
{ 
    B der(222); 
    A* test; 
    test = &der; 
    delete test; 
} 

我得到了一個錯誤:

debug assertion failed! 

program:....... 
line 52 

Expression:_BLOCK_TYPE_IS_VALID(pHead0>nBlockUse) 

有什麼想法嗎?

+8

'der'具有自動存儲。它將被自動取消分配。在其地址上調用'delete'是非法的(並導致未定義的行爲)。 – jogojapan 2013-02-25 04:20:40

+2

每一次刪除都應該使用一個新的。同時使用或不使用。 – 2013-02-25 04:21:37

+0

沒有'new' no'delete' – billz 2013-02-25 04:21:38

回答

3

對於您沒有手動分配內存的變量,您不能調用delete

2

在您的代碼der不是一個動態分配的對象。即,它不使用new進行分配。所以你不應該在該對象上使用delete。一旦超出範圍,對象將自動銷燬。如果要使用delete,則應使用new

A * test = new B(222); 
delete test;