2012-03-10 134 views
-1

我在做什麼錯?我分配使用新的但當我嘗試刪除[]它給了我一個錯誤。處理2d數組指針

mycode的:

int** ma; 
int n; 
int m; 
m = nr_col_lin; 
n = nr_col_lin; 

ma = new int*[m]; 
for(i = 0; i < m; i++) 
    ma[i] = new int[n]; 

for (i = 0; i < m; i++) 
{ 
    for (j = 0; j < n; j++) 
    { 
     ma[i][j] = 0; 
    } 
} 

和dealocation:

for(int i = 0; i < m; ++i) 
    delete[] ma[i]; 

delete [] ma; 

編輯:

我發現這個問題......這不是在代碼...我刪除我沒有分配的東西。

+3

您是否誠實地認爲「它給了我一個錯誤」是一個對任何人都有幫助的語句,它是真的嗎?最好你可以拿出來? – 2012-03-10 17:24:31

回答

3

還有絕對沒有代碼錯誤。這十分完美。探針必須在其他地方,假設nr_col_lin用一些有效值初始化,即確保它不是0或否定的。如果它是size_t或一些無符號整數值,那麼請確保mn大於0.

+0

好吧,我這樣做,但它仍然給我一個錯誤。如果我有2個指針ma1和ma2,並且我說ma1 = ma2,那麼使用delete [] ma1會出錯嗎? – Dementor 2012-03-10 17:25:17

+0

'正確'是,'完美'......好吧,計算星號和刪除號的數量,乘以可怕並撒上可怕的刨花。 – 2012-03-10 17:25:37

+0

@Dementor:不,它不是。但是,在delete [] ma1'後面使用'ma2'是錯誤的。最有可能的是,你解引用了一個懸掛指針。 – 2012-03-10 17:25:51