10818번 - 최소, 최대
배열 선언할 때 N지우고 그냥 1000같은 숫자 넣고 제출하면 맞는데
변수를 넣고 제출하면 틀렸다고 뜨는데 왜 틀린 건지 아무리 생각해봐도 모르겠습니다
왜 변수 넣으면 틀린 건가요??
N이 초기화되지 않은 상황에서 N만큼 배열 할당을 하는 건 불가능 합니다. 더군다나 N(변수)이 초기화 됐다고 하더라도 C99버전 이전까지는 배열 크기 지정에 변수를 사용할 수 없었는데 C99부턴 허용하고 있긴 합니다. 따라서 애초에 넉넉한 사이즈만큼 배열 크기를 지정하던, 동적 할당을 하는 것이 바람직합니다.
혹시 컴파일러에선 실행이 되는데 컴파일러에선 그냥 허용을 해주는 건가요??
어느 컴파일러에서 실행이 되는지 모르겠지만 앞서 말씀 행위 자체는 분명히 Undefined behavior입니다.
아마 실행된 컴파일러에선 변수 선언 후 초기화 하지 않을 시 쓰레기 값이 들어있게 되는데 이를 이용해 실행이 됐을 것 같은데 원래는 세그멘테이션 오류(Core Dump. 허용되지 않은 (방법으로) 메모리 영역에 접근 시도)로 컴파일 에러가 발생합니다.
아.. 이해했습니다 감사합니다!
댓글을 작성하려면 로그인해야 합니다.
xofla1234 1년 전
배열 선언할 때 N지우고 그냥 1000같은 숫자 넣고 제출하면 맞는데
변수를 넣고 제출하면 틀렸다고 뜨는데 왜 틀린 건지 아무리 생각해봐도 모르겠습니다
왜 변수 넣으면 틀린 건가요??