2012-10-09 2 views
4

제가새로운 기능으로 메모리가 할당되지 않습니까?

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 메모리 공간이 할당되지 않는 단 (메인) 등의 선언 된 2 차원 어레이

int **matriz = NULL; 

이다 (abc 기능에서)이 코드 부분을 new 연산자를 사용하십시오. 내가 뭘 잘못하고있어? 또한 main 함수에서 메모리를 직접 할당하는 것이 더 낫습니까? 그게 코드를 더 읽기 어려운가요?

PS : 넷빈즈에 디버깅 (또는 단자) 나는 (내가 잘못 아니에요 경우 NULL) matriz ADRESS는 = 0x0

+3

코드가 정상적으로 나타납니다. 메모리가 할당되지 않았다는 아이디어를 뒷받침하는 증거는 무엇입니까? –

+2

'matriz'가 2D 배열이라고 생각하지 않습니다; 이것은 포인터에 대한 포인터이며,'matrix [i] [j]'가 2D 배열처럼 작동하도록 조심스럽게 초기화 될 수 있습니다. –

답변

3

이 새로운 동작은 (nothrow) 조용히 실패 및 반환 의미있어 NULL, 얼마나 많은 메모리를 할당하고 있습니까?

+0

nothrow가 실패하면 0을 반환하지 않습니까? –

+0

그렇습니다. null 포인터는 실제로 0입니다. – FamZheng

0

코드 블럭에서 G ++로 컴파일하고 실행했습니다. 어떤 문제도없이 잘 돌아갔습니다. 할당 자에게 엄청나게 큰 적절한 값이 있는지 확인하기 위해 오류 검사를 제공해야합니다 (IE : -1을받은 부호없는 long). 버퍼가 얼마나 커질 지 확인하십시오.

+0

matriz 선언과 다른 함수에 할당 했습니까? –

+0

필자는'int ** matriz = 0;'을하고 int test_objetos = 15;와 int tam_mochila = 6;을 테스트 목적으로 설정했습니다. – M4rc

관련 문제