와 2 차원 배열을 생성하지만, 내가 말할 때 나는 오류를 얻을 :가변 크기 치수
int array[0][0]
array = new int[width][height]
와 2 차원 배열을 생성하지만, 내가 말할 때 나는 오류를 얻을 :가변 크기 치수
int array[0][0]
array = new int[width][height]
시도를 이 방법 :
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];
}
당신은 포인터에 포인터를 사용한다 :
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
희망. 배열이 직사각형 인 경우
, 당신의 예에서와 같이, 당신은 단지 하나 개의 할당으로 작업을 수행 할 수 있습니다
int* array = new int[width * height];
이 효과적으로 단일 차원으로 배열을 평평하게, 그리고 훨씬 더 빠릅니다.
물론 C++이기 때문에 std::vector<std::vector<int> >
을 사용하지 않으시겠습니까?
참조 http://stackoverflow.com/questions/5279643/declaring-dynamic-2d-vector-in-class –
[관련 FAQ] (http://stackoverflow.com/questions/4810664/) – fredoverflow