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