2012-03-10 104 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