이 코드는 배열 선언 중에 세그먼트 오류를 생성합니다. 나는 이것이 왜 일어나는 지 혼란 스럽다. 나는 그것이 2^31 이하이고 정수 변수에 들어갈 수 있기 때문에 값으로 2000000000을 의도적으로 선택했습니다.C 프로그래밍, 왜이 큰 배열 선언이 세그먼테이션 결함을 생성합니까?
int main()
{
int nums_size = 2000000000;
int nums[nums_size];
int i;
for(i = 0; i < nums_size; i++) {
nums[i] = i;
}
return 0;
}
그렇지 않은 경우에도 32 비트 플랫폼에서 2000000000 * 4 = 8,000,000,000 바이트입니다. 그것은 거의 2^33이며 사용 가능한 메모리 이상입니다. –
@Chris : 예 - 제가 게시 한 후에까지 실제로 0을 계산하지 않았습니다. 그것은 많은 정수입니다! –
또한 정적 저장 기간이있는 매우 큰 배열을 할당하는 것이 일반적으로 가능합니다. – caf