2012-10-09 94 views
4

我有這樣一段代碼(在功能abc新不分配內存?

matriz = new (nothrow) int*[qnt_objetos]; 
if (matriz == 0) 
    exit(0); 

for (int i = 0; i < qnt_objetos; i++) 
{ 
    matriz[i] = new (nothrow) int[tam_mochila]; 
    if (matriz[i] == 0) 
     exit(0); 
} 

matriz是聲明爲這樣的二維陣列(上主)

int **matriz = NULL; 

但是存儲空間不分配時使用new運算符。我做錯了什麼?另外,直接在main函數中分配內存會更好嗎?這不會讓代碼變得難以辨認嗎?

PS:調試它的NetBeans(或終端),我得到了matriz ADRESS = 0x0NULL,如果我沒有記錯)

+3

您的代碼顯示正常。你有什麼證據支持沒有分配內存的想法? –

+2

我不認爲'matriz'是一個二維數組;它是一個指向指針的指針,可以將其初始化,以使'matrix [i] [j]'像二維數組一樣工作。 –

回答

3

這意味着新的操作正在悄悄地失敗(拋出異常),並返回NULL,你分配多少內存?

+0

什麼時候出現失敗它不會返回0? –

+0

是的,它的確如此。一個空指針確實是0. – FamZheng

0

我使用代碼塊中的G ++編譯並運行它。它運行得很好,沒有任何問題。 你應該提供一些錯誤檢查,以確保分配器有一個適當的值,這個值不是很大(IE:一個無符號長整數,接收-1)。 所以一定要檢查緩衝區的大小。

+0

你把這個分配放在一個與matriz聲明不同的函數上嗎? –

+0

我只是做了'int ** matriz = 0;'並且爲我的測試目的設置了'int qnt_objetos = 15;'和'int tam_mochila = 6;'。 – M4rc