sop369   6년 전

c++을 시작한지 얼마 되지 않은 학생입니다. 요즘들어서 백준을 풀 떄마다 거의 런타임 에러가 많이 발생하는데 그 이유가 무엇일지 너무 궁금합니다. 주로 런타임 에러가 발생하는 이유는 무엇인가요?

sosfd   6년 전

배열 인덱스를 잘못 참조했을떄요~

juhongkim2   6년 전

arr[100]이라는 배열을 선언 하고 arr[-1]이나 arr[101]을 참조하거나 하는 경우를 말하시는듯 하네요...

djm03178   6년 전

  1. 배열에 할당된 크기를 넘어서 접근했을 때
  2. 전역 배열의 크기가 메모리 제한을 초과할 때
  3. 지역 배열의 크기가 스택 크기 제한을 넘어갈 때
  4. 0으로 나눌 떄
  5. 라이브러리에서 예외를 발생시켰을 때
  6. 재귀 호출이 너무 깊어질 때
  7. 이미 해제된 메모리를 또 참조할 때

djm03178   5년 전

구글 검색으로 많이 들어오시는 거 같은데 오래된 정보라 하나 추가합니다.

8. 프로그램(main 함수)이 0이 아닌 수를 반환했을 때

ldgeao99   4년 전

저 같은 경우에는 입력을 받아들이는 배열의 크기를 너무 작게 줘서 채점시 오류가 났었던 경험이 있습니다.

입력의 조건을 잘 확인하고 배열의 크기를 충분히 할당해야할 거 같아요

아래와 같은 식으로 말이죠

int a[10] (x)

int a[10000] (o)

roeniss   4년 전

djm03178님 무병장수하세요

djm03178   4년 전

하나 더 추가합니다.

9. C/C++에서 반환형이 void가 아닌 main이 아닌 함수에서 아무런 값을 반환하지 않았을 때

kdog1503   4년 전

저는 주로 테스트 자동화를 위해 아래와 같은 코드를 사용하는데요 

fp = freopen("2309_B.txt", "r", stdin);
if (fp == 0) {
puts("No File Existed!!");
exit(1);
}
else {
if (DEBUG) {
printf("DEBUG : fp=%d", fp);
}
}

위 코드에서 freopen 함수를 통해서 표준입출력을 리다이렉션 하는 경우 런타임 에러를 내뿜어주네요!

sfsepark   4년 전

백준에서 사용하는 각 언어의 컴파일러 / 실행옵션을 그대로 재현하면 버그 추적에 더 도움이 됩니다.
https://www.acmicpc.net/help/language

예를 들어 C++14 의 경우에는 
g++ Main.cc -o Main -O2 -Wall -lm -static -std=gnu++14 -DONLINE_JUDGE -DBOJ 로 컴파일하는데,
-Wall 옵션때문에 몇가지 오류는 실행하기 전에 오류를 예측해볼수있습니다.

런타임에러가 일어나는 이유 자체는 대부분 위 댓글분들이 말씀해주신 것들 중에서 나옵니다

walcoll2   3년 전

djm03178

너무 감사합니다!!.. 

아무리 봐도 1시간째 틀린걸 못찾고 있었는데 ㅠㅠ

처음에 int형 함수로 반환을 받으려다가 중간에 전역변수를 쓰는걸로 바꿔서 return값이 없어졌는데도 불구하고 계속 int형 함수로 뒀네요 ㅠㅠ

djm03178   3년 전

보다 정리된 글을 하나 썼습니다. https://www.secmem.org/blog/20...

lupin_dev   9달 전

저처럼 검색타고 들어오시는 분들 위해서 저도 정보 공유해 봅니다.

저는 BFS 문제를 풀고 있던 상황이었는데, 런타임 에러 (DoubleFree) 가 발생했었습니다.

저의 경우는 main()이 아닌 다른 함수에서 값을 반환하지 않았기 때문이었습니다.

아래와 같이 수정하여 해결하였습니다.

많은 도움이 되시길!




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