eric00513   5년 전

안녕하세요.

혹시 런타임 에러는 소스에서 무엇이 잘못되었을 때 나타나는지 알 수 있을까요? 제발 부탁드립니다.

혹시 참조하지 않아야 할 인텍스를 참조한 것이 문제일까요?

bupjae   5년 전

런타임 에러는 다음과 같은 경우에 발생합니다.

1) 작성한 프로그램이 프로그램 언어의 규칙을 어겼을 때 (단, 어긴 규칙이 문법이었다면 컴파일 에러가 대신 발생합니다)

2) 프로그램 수행 후 OS에 반환하는 값이 0 이 아닌 경우

 

질문하신 분이 주로 사용하는 C++ 언어를 기준으로 좀 더 자세히 설명해 보겠습니다.

C++ 언어의 규칙에는 "이 규칙을 따르지 않으면 프로그램의 실행 결과는 정의할 수 없다 (Undefined Behavior)" 라고 되어있는 부분이 매우 많습니다.

가장 대표적인 예로는, 공간 10칸을 가지는 배열 int ary[10]; 을 선언해 놓고 뜬금없이 cout << ary[20]; 이런 식으로 20번째 값을 읽으려고 하면 Undefined Behavior 가 발생합니다.

이렇게 되면, 그 프로그램의 실행 결과를 예측하는 것은 불가능합니다.

 

대부분의 C++ 구현체는 이런 상황이 발생하면 Segmentation Fault 같은 오류와 함께 프로그램을 강제종료 시키는 경우가 많습니다.

"런타임 오류"는 이러한 강제종료가 발생했을 때 받는 결과잆니다.

프로그램에 오류가 있다고 해도 항상 "런타임 오류"를 받는 것은 아니지만, "런타임 오류"를 받았다면 프로그램에 오류가 있는 것은 거의 확실합니다.

 

2번의 경우 main 함수의 반환값을 항상 0으로 하고, exit 함수를 쓸 때 항상 exit(0); 을 사용한다면 발생하지 않는 문제입니다.

eric00513   5년 전

@bupjae @djm03178

네 정말 정말 감사합니다~~!
덕분에 런타임 에러에 대해 더 자세히 알게되었습니다. 정말 감사합니다.

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