dltjr0703   2년 전

아래 코드처럼 문제의 10000개까지 메모리 할당이 정상적으로 되는데

int number[10001];

이렇게 선언하니까 9000개 정도부터 인식을 못하더라구요

구글링으로는 int 배열 최대 크기가 10^5개 정도된다는데

왜 이런지 설명 부탁드립니다.

djm03178   2년 전

배열의 최대 크기와는 상관 없습니다. 크기가 10001일 때의 문제는 d(9999) 등이 10000을 넘어간다는 것입니다.

"구글링으로는 int 배열 최대 크기가 10^5개 정도된다는데" 이건 어디서 찾으신 건지 모르겠지만 전혀 아닙니다. 훨씬 큰 배열도 만들 수 있습니다.

dltjr0703   2년 전

제가 궁금한거는 같은 문제를

하나는 int number[MAX+1] 배열 선언으로 풀면 오류가 발생하고

(마지막에 정답 출력할 때 9000번 이후에 비정상 종료함)

하나는

int *number;
number = (int*)calloc(MAX+1, sizeof(int)); 메모리 할당으로 배열을 만들면 정상 작동하는데

왜 이런지 궁금합니다

djm03178   2년 전

둘 다 할당받은 배열의 범위를 벗어나므로 undefined behavior입니다. Undefined behavior는 무슨 일이 일어날지 모르는 것이기 때문에 그냥 운이 좋으면 특정 undefined behavior를 발생시키더라도 아무 문제 없이 넘어가질 수도 있고, 런타임 에러가 나거나 전혀 의도와 다른 동작을 할 수도 있습니다. 여기에 대해 '왜'라고 의문을 가지는 것이 크게 의미가 없습니다.

https://www.secmem.org/blog/20... 를 참고하세요.

댓글을 작성하려면 로그인해야 합니다.