항상 프로그래밍 질문만 하러 오는거 같네요;
dev-c++에서 정렬 프로그램을 만들고 있는데, 숫자 개수가 억단위 입니다-_-;
유사코드를 보면서 만들고 있는데,
타입을 long으로 해주어도 오버플로가 나는건지 컴파일 후 프로그램을 실행하면 윈도우 오류창을 뱉으면서 뻗네요;
예를들어서,
#include <stdio.h>
#include <stdlib.h>
int main(){
long n = 0;
printf("입력>>");
scanf("%ld",&n);
printf("\n 값은 %ld",n);
long list[n]; //VB에서는 에러지만, gcc(GNU)에서는 아니더라고요..
printf("\n에러없음.\n");
system("pause");
return 0;
}
이렇게 했다고 하면, 520000까지는 괜찮은데 그 이상이면 뻗습니다.;
long형은 2,147,583,647까지 받을 수 있는거로 알고 있는데, 받질 못하네요.. 32bit 넘어가기 때문인가요;?
이거 해결 방법이 있나요;? malloc으로 선언해줘야 할까요;; linked-list면 될까요;ㅛ;?
참고로 사용하는 컴퓨터는 램이 1기가입니다;
이유는 local 영역과 global영역의 stack 크기가 다른데, local영역 stack은 시스템마다 틀리지만 어쨌든 작다고 하네요.
그래서 지역 변수 안에 저렇게 메모리를 잡으면 얼마 못가서 오버플로로 터진다고 합니다.
그냥 heap으로 잡아주면 해결됩니다.