2011-04-01 2 views
4
나는 2 차원 배열을 내가 파일에서 읽어 폭과 높이의 크기를 만들 수 있도록하려면

와 2 차원 배열을 생성하지만, 내가 말할 때 나는 오류를 얻을 :가변 크기 치수

int array[0][0] 
array = new int[width][height] 
+0

참조 http://stackoverflow.com/questions/5279643/declaring-dynamic-2d-vector-in-class –

+0

[관련 FAQ] (http://stackoverflow.com/questions/4810664/) – fredoverflow

답변

1

시도를 이 방법 :

int **array; // array is a pointer-to-pointer-to-int 

    array = malloc(height * sizeof(int *)); 
    if(array == NULL) 
     { 
     fprintf(stderr, "out of memory\n"); 
     exit or return 
     } 
    for(i = 0; i < height ; i++) 
     { 
     array[i] = malloc(width * sizeof(int)); 
     if(array[i] == NULL) 
      { 
      fprintf(stderr, "out of memory\n"); 
      exit or return 
      } 
     } 

    array = new int*[width]; 
    if(array == NULL) 
     { 
     fprintf(stderr, "out of memory\n"); 
     exit or return 
     } 
    else 
    { 
    for (int i = 0;i<width;i++) 
     array[i] = new int[height]; 
    } 
+1

C++의'malloc'. – sje397

+1

이것은 실제로 일을하는 'C'- ish 방법입니다. 게다가'fprintf' 호출은 실제로 여기에 자리가 없습니다. 일부 정리를 할 수 있습니다. – Jon

13

당신은 포인터에 포인터를 사용한다 :

int** array; 
array = new int*[width]; 
for (int i = 0;i<width;i++) 
    array[i] = new int[height]; 

당신이 그것을 사용하여 완료하거나 크기를 조정할 때, 이 같은 할당 된 메모리를 해제해야합니다

for (int i = 0;i<width;i++) 
    delete[] array[i]; 
delete[] array; 

가 이해하기 더 복잡한 유형을 읽을 수,이 링크는 도움이 될 수 있습니다 도움이

http://www.unixwiz.net/techtips/reading-cdecl.html

희망. 배열이 직사각형 인 경우

+2

...'delete []'로 삭제하는 것을 잊지 마십시오. – sje397

+0

TAMER 너는 너의 높이와 너비를 바꿔야한다고 생각해. – jonsca

+1

@ jonsca : 그가 쓴 내용에 따르면, 이것은 적절한 방법입니다 ... –

1

, 당신의 예에서와 같이, 당신은 단지 하나 개의 할당으로 작업을 수행 할 수 있습니다

int* array = new int[width * height]; 

이 효과적으로 단일 차원으로 배열을 평평하게, 그리고 훨씬 더 빠릅니다.

물론 C++이기 때문에 std::vector<std::vector<int> >을 사용하지 않으시겠습니까?