런타임 에러 발생 원인 정리

런타임 에러가 발생하는 원인 몇 가지

1. 함수가 아무런 값도 반환하지 않을 때

#include <stdio.h>
int print(){ 
    printf("hi");
} // return 이 없음에도 반환형이 int -> 런타임 에러 발생
int main(){
    print();
}

함수 종료 후 반환되는 값이 없음에도 반환형을 void가 아닌 다른 타입으로 지정한다면 런타임 에러가 발생합니다.

( 단, main함수의 경우 return 0; 을 생략해도 컴파일러가 알아서 추가해줍니다. )


2. 배열 크기를 벗어난 인덱스에 접근할 때

#include <stdio.h>
int a[10];
int main(){
    int n; // -100 < n < 100
    scanf("%d",&n);
    printf("%d",a[n]);
}

배열 크기보다 크거나 음수인 인덱스에 접근을 할 때 런타임 에러가 발생합니다.


3. main함수가 0이 아닌 값을 리턴할 때

#include <stdio.h>
int main(){
   return printf("hello");
}

main함수가 0이 아닌 다른 값, 즉 true를 리턴하면 런타임 에러가 발생합니다.

출력과 동시에 프로그램을 종료할 때 return !printf(“hello”); 를 쓰는데,
!(not)이 빠지지 않았는지 꼭 확인합시다.


4. 0으로 나눌 때

#include <stdio.h>
int main(){
   printf("%d\n",10/0);
   printf("%d",10%0);
}

0으로 나누거나 나머지 연산을 할 때 런타임 에러가 발생합니다.


5. 비어있는 컨테이너를 참조할 때(C++)

#include <stack>
#include <iostream>
using namespace std;
int main(){
    stack<int> s;
    cout << s.top();
}

비어있는 스택, 큐, 벡터 등의 컨테이너에 pop, front, top 연산을 했을 때 런타임 에러가 발생합니다.


© 2018. All rights reserved.

Powered by Hydejack v8.5.2