2012-08-15 2 views
1

이 오류를 얻을MAX_INT는 climits.h에 정의 된 한계에 도달하기 전에

Error

내가 입력 할 때마다의 Microsoft Visual C++ 2010 Express와 함께 컴파일 된 코드의 어떤 숫자 다음보다 큰 :

int size = 276447232; 

비록, conversation, this one 또는 thatonethis에 따라, 나는 발생하기 전에 2,147,483,646까지 갈 수있을 것입니다 어떤 문제라도, 아니야? (C 또는 new ++)

char *outputGwb = char[size]; // array is created "on the stack" 

사용 malloc에서 메모리를 할당하기 :

스카이

+0

나는 할당이'abort()'를 일으킬 것이라고 생각하지 않습니다. 어떻게 변수/값이 사용됩니까? 즉, 실제로 "디버그 오류!"를 유발하는 * 다른 줄이 있습니까? –

+0

안녕하세요. 지연되었습니다. 죄송합니다. 사실, 다음 줄에'size'를 사용합니다 : 'char * outputGwb = new char [size];'. 하지만이 오류는'size' 매개 변수를 변경할 때만 나타납니다 ... –

답변

1

이 프로그램은 너무 많은 스택을 공간을 할당하기 위해 노력하고있다. 나중에 메모리가 free (또는 C++에서는 delete)인지 확인하십시오. 할당/할당 취소 전략을 혼용하지 마십시오.

char* outputGwb = new char[size]; // C++: note use of the "new" keyword 
char* outputGwb = malloc(size); // C: note no cast needed in a C compiler 

이 문제는 특정 자원에 대한 최대 크기이며 따라서 정수 값을 나타낼 수있는 최대 횟수에 하지이다.

두 메모리 할당 영역 사이에 대한 설명은 What and where are the stack and heap?을 참조하십시오. 또한 반드시 권장하지는 않지만 여기서는 thread that discusses how to change the stack size in Visual C++입니다.

+0

사실, 나중에 코드에서 메모리를'삭제 '한다는 사실을 잊어 버렸습니다. 비록 변경 사항을 정확하게 얻지는 못했지만 스택의 _과 _ 힙 _의 차이점은 무엇입니까? –

+0

추신 : 대단히 감사합니다. –

+0

@ RobinLen'hog 그것은 new'd (또는 malloc'ed)가 아닌 것을 지우거나 (무료로) 나쁘게 생각합니다. :) 게시판을 스택 관련 질문에 대한 링크로 업데이트했습니다. C와 C++에서 힙 할당과 힙 할당 예제를 비교했습니다. –

관련 문제