런타임 에러 발생 원인 정리
in Tips. / 🚩 C 팁 목록 (9)
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 연산을 했을 때 런타임 에러가 발생합니다.