본문 바로가기
C언어

런타임 에러가 무엇일까? 런타임 에러가 발생하는 이유

by 여름코딩 2022. 12. 26.
반응형

안녕하세요 판타지 코딩입니다.

 

알고리즘 문제를 풀다 보면 런타임 에러가 발생할 때가 있습니다. 그런데 런타임 에러가 어떤 내용인지 모르면 오류를 수정하는데 오랜 시간이 걸릴 수 있습니다. 그러므로 런타임 에러가 무엇인지 간단하게 알아두고, 어떤 문제가 있는지 확인하는 디버깅 능력을 기르면 문제 풀이를 하는데 시간을 줄일 수 있을 것입니다. 그럼 오늘은 런타임 에러가 무엇인지 알아보고, 런타임 에러가 발생하는 이유에 대해서 알아보겠습니다.

 

런타임 에러

 

1. 런타임 에러가 무엇인가?

  런타임 에러란 코드 실행 중에 발생하는 에러를 말합니다. 런타임은 run time이므로 말 그대로 실행 중에 발생할 수 있는 에러를 의미합니다. 코드의 오류를 발견하기 위해서 하는 컴파일 시에는 발생하지 않던 에러가 실행 이후에 발생하는 것입니다. 컴파일 오류가 발생한다면 해당 부분에 어떤 코드가 잘못되었는지 발견하기 쉽고, 실행 전에 발견하면 시간을 줄여줍니다. 하지만 코드를 실행한 이후에 런타임 오류가 발생하면 어느 부분이 잘못되었는지 발견하기가 비교적 어렵습니다. 또한 어느 부분이 잘못되었다는 메세지가 없다면 디버깅을 하는데 오랜 시간이 걸리기도 합니다. 그렇다면 런타임 에러가 발생하는 원인을 알아보겠습니다.

 

2. 런타임 에러의 원인은 무엇인가?

  런타임 에러의 원인은 여러 가지가 있습니다. 코드 실행 중에는 여러 가지 문제가 발생할 수 있기 때문입니다. 그러므로 런타임 에러 발생시에는 코드를 순차적으로 확인해볼 필요가 있습니다. 그 중에서도 자주 발생되는 에러는 변수가 활용할 수 있는 index의 범위를 넘어가는 것입니다. 아래에 예를 들어보겠습니다.

 

vector<int> vec;

vec.push_back(1);

vec.push_back(2);

 

cout << vec[2] << endl;

 

  위 코드는 정수를 저장할 수 있는 vector를 선언하고 정수 1, 2를 순서대로 push_back을 통해 저장한 것입니다. 그리고 cout을 통해 vec의 2번째 인덱스에 있는 데이터를 출력하도록 했습니다. 그런데 이 코드는 에러를 일으킵니다. 무엇때문에 그럴까요? 바로 존재하지 않는 인덱스에 있는 데이터를 출력하려고 하기 때문입니다. vec[2]에는 저장한 데이터가 없습니다. 0번째에 1을 먼저 저장했고, 1번째에 2를 저장했기 때문입니다. 그러므로 2번째에는 데이터가 없으므로 에러를 발생시킵니다. 만약 이 코드를 실행시켰다면 int형 데이터를 저장할 수 있는 vector를 생성하고, 1과 2를 push_back 한 뒤에 cout으로 vec에 저장된 2번째 인덱스의 데이터를 출력하는 시점에서 에러가 발생할 것입니다. 이처럼 실행 중에 발생할 수 있는 에러가 바로 런타임 에러입니다.

  만약 이런 에러를 수정하고 싶다면 중간 중간 데이터의 저장과 출력이 정상적으로 되고 있는지 출력해보는 방법이 있습니다. 코드 실행 중 어느 부분까지 정상적으로 실행되는지 확인하기 위해서 중간마다 printf나 cout 등을 통해서 출력해보는 것입니다.

 

그럼 오늘은 런타임 에러에 대해서 공부해보았습니다.

 

감사합니다!

반응형