xofla1234   1년 전

배열 선언할 때 N지우고 그냥 1000같은 숫자 넣고 제출하면 맞는데

변수를 넣고 제출하면 틀렸다고 뜨는데 왜 틀린 건지 아무리 생각해봐도 모르겠습니다

왜 변수 넣으면 틀린 건가요??

pill27211   1년 전

N이 초기화되지 않은 상황에서 N만큼 배열 할당을 하는 건 불가능 합니다. 더군다나 N(변수)이 초기화 됐다고 하더라도 C99버전 이전까지는 배열 크기 지정에 변수를 사용할 수 없었는데 C99부턴 허용하고 있긴 합니다. 따라서 애초에 넉넉한 사이즈만큼 배열 크기를 지정하던, 동적 할당을 하는 것이 바람직합니다.

xofla1234   1년 전

혹시 컴파일러에선 실행이 되는데 컴파일러에선 그냥 허용을 해주는 건가요??

pill27211   1년 전

어느 컴파일러에서 실행이 되는지 모르겠지만 앞서 말씀 행위 자체는 분명히  Undefined behavior입니다.

아마 실행된 컴파일러에선 변수 선언 후 초기화 하지 않을 시 쓰레기 값이 들어있게 되는데 이를 이용해 실행이 됐을 것 같은데 원래는 세그멘테이션 오류(Core Dump. 허용되지 않은 (방법으로) 메모리 영역에 접근 시도)로 컴파일 에러가 발생합니다.

xofla1234   1년 전

아.. 이해했습니다 감사합니다!

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