2009-08-11 3 views
2

배열을 선언하고 싶습니다. int a [256] [256] [256] 그리고 프로그램이 멈 춥니 다. (이미 다른 모든 코드를 주석 처리합니다 ...) int [256] [256]을 시도하면 괜찮습니다.C++의 다차원 배열은 행이

MingW C++ 컴파일러 인 Eclipse CDT를 사용하고 있습니다.

내 코드 : int main() { int a [256] [256] [256]; return 0; }

모든 의견을 환영합니다.

+0

"다른 모든 코드를 주석으로 처리하다"는 것은 무엇을 의미합니까? 'int a [256] [256] [256]'과 빈 메인 메쏘드'int main() {}'로 구성된 프로그램이 멈추는 것을 의미합니까? –

+0

실제 코드를 환영합니다. – Alex

+5

256 * 256 * 256은 1,600 만 개 요소입니다. 배열은 32 비트 시스템에서 64 메가 바이트입니다. 현대 시스템에서는 부적절하지 않지만 스택 (함수 내부)에 할당하는 경우 컴파일러와 운영 체제가 예상하는 것보다 더 큽니다. –

답변

10

배열이 함수에 대해 로컬 일 경우 발생할 수 있습니다. 이 경우 2^24 int (2^26 바이트 또는 64MB)를 수용하는 데 충분한 스택 크기가 필요합니다.

배열을 전역으로 만들면 작동합니다. Windows에서 스택 크기를 수정하는 방법을 잘 모르겠습니다. 리눅스에서는 "ulimit -s 10000"(단위는 KB 임)을 사용합니다.

전역 (동시성 또는 재귀)을 사용하지 않는 것이 좋은 이유가 있다면 malloc/free를 사용할 수 있습니다. 중요한 것은 스택을 늘리거나 (스레드를 사용하는 경우에는 좋지 않음) 힙 (malloc/free) 또는 정적 데이터 세그먼트 (전역)에서 데이터를 가져 오는 것입니다.

이상적으로 프로그램 종료 (코어 덤프)가 발생하고 멈추지 않을 것입니다. 나는 cygwin에서 해. 다른 사람들이 지적으로, 코드에서 당신이 배열을 할당하고

alt text http://bweaver.net/files/stackoverflow1.jpg

, 때문에 :

+0

+1, 나를 이길! malloc 또는 new []를 사용하여 힙에서 메모리를 할당하면 실제로 문제가있는 경우 문제를 해결할 수 있습니다. –

+0

스택에서 64MB를 먹으려 고 시도하는 것이 가장 쉽습니다. 실제로 +1합니다. –

0

아마도 무료 연속 메모리가 16MB가 아니십니까? 상상하기 힘든 종류 일 수도 있지만 가능합니다 ...

+0

@bkritzer : 64MB; int는 4 바이트입니다. 8-) – RichieHindle

+0

"int"부분에주의를 기울이지 않았습니다. – bkritzer

0

당신은 당신이 뭔가를 얻을, 그렇지 않으면이

#include <malloc.h> 
int main() 
{ 
    int *a; 
    a = (int*)malloc(256*256*256*sizeof(int)); // allocate array space in heap 
    return 0; 
} 

뭔가를 원하는 스택에, 그것을 불어.

malloc 또는 그 친구를 통해 배열을 할당하는 것이 좋습니다. (당신이 그 길로 가야한다면, 전 세계적으로 그것을 만들 수 있습니다.)