2010-07-05 118 views
3
//the setup 
tiles = new Tile **[num_bands]; 
for(int i = 0 ; i < num_bands ; i++) 
tiles[i] = new Tile *[num_spokes]; 

for(int i=0; i < num_bands; i++){ 
    for(int ii=0; ii < num_spokes; ii++){ 
     tiles[i][ii] = 0; 
    } 
} 


//the problem 
delete tiles[1][1]; 

當我刪除一個圖塊時,圖塊[1] [1]仍然保存着一個地址。我認爲它應該是一個空指針或0x0,但它不是。我刪除這個錯誤嗎?什麼是刪除數組中指針的正確方法?

+2

正確的方法是在內部使用'std :: vector >'並在其周圍包裹一些薄的二維數組外殼。 – sbi 2010-07-05 22:00:18

回答

12

delete不應該將指針置空;如果你願意,這是你自己的責任。

基本上,delete只是意味着「我不再需要這個地址的內存,所以你可以用它來做其他事情。」 - 它沒有說任何關於指向釋放地址的值指針。

0

說其他人指出什麼出的另一種方式:

1)指針指向的內存位置。

2)刪除只是釋放指針指向的內存。但是指針將保持指向相同的地方。

3)如果你願意,你必須自己取消指針。

0

除非我在C++上生鏽,否則設置指針= 0並不會釋放內存。你所做的事實質上就是泄漏你的整個矩陣。

1

使用釋放自己資源的智能指針。在C++中,除非明確指定資源管理器類,否則通常認爲處理自己的資源非常糟糕。

相關問題