2012-03-10 72 views
1
malla = new Celula**[n + 2]; 
for(int i = 0 ; i < n + 2 ; ++i){ 
    malla[i] = new Celula*[m + 2]; 
    for(int j = 0 ; j < m + 2 ; ++j){ 
     malla[i][j] = new Celula[m]; 
    } 
} 

我做这个代码,我分配内存,这样的(我想n*m数组指针来Celula,是好吗?现在我需要一个析构函数。如何删除这个二维指针数组?制作一个析构函数

现在我不知道如何访问一个对象数组中和:

malla[i][j].setestado(true); 

不起作用

+1

*我想指针的N * M个阵Celula,是好的* - 不,这不好吗?。你应该使用'boost :: multi_array ' – 2012-03-10 16:04:00

回答

3

认真考虑@ konrad's的建议。如果无论如何你想要去的原始数组的,你可以这样做:

解除分配:

for(int i = 0 ; i < n + 2 ; ++i) 
{ 
for(int j = 0 ; j < m + 2 ; ++j) delete[] malla[i][j] ; 
delete[] malla[i]; 
} 
delete[] malla; 

访问对象:

malla[i][j][_m].setestado(true); 

编辑:

如果malla[i][j]是指针简单地对象然后析构/取消分配将如下所示:

for(int i = 0 ; i < n + 2 ; ++i) 
{ 
for(int j = 0 ; j < m + 2 ; ++j) delete malla[i][j] ; 
delete[] malla[i]; 
} 
delete[] malla; 

访问对象/会员可以做到像:(*malla[i][j]).setestado(true);malla[i][j]->setestado(true);

+0

我终于与malla [i] [j] - > setestado(真);谢谢!! – freinn 2012-03-11 11:06:41

+0

@freinn'malla [i] [j]'是指向您的情况下'Celula'类型的第一个元素的指针。你的方式,你正在访问'malla [i] [j]'指向的第一个元素的成员。但是如果你想访问malla [i] [j]'指向的第二个元素(或者它的成员)?那么你必须:'malla [i] [j] [_ m] .setestado(true);' – 2012-03-11 11:43:21

+0

好的抱歉,但在构造函数中是一个错误,真的是malla [i] [j] =新celular;但你对你的理解是正确的,thx! – freinn 2012-03-11 12:23:26

5

Don’t use pointers

。 10

Upshot:一行而不是七个,使用更简单,没有delete需要任何地方。

顺便说一句,在代码中使用英文标识符是常规的。如果没有别的,这有一个好处,就是人们可以帮助你更好,如果他们不像你说同一种语言。

+0

谢谢,但是我没有时间做这个功课:S:S对不起,我会在其他情况下使用它 – freinn 2012-03-11 11:02:53