sop369   2년 전

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

sosfd   2년 전

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

sop369   2년 전

무슨 뜻인지 조금 자세히 알려주실 수 있나요?? ㅠㅠ 제가 잘 몰라서

juhongkim2   2년 전

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

djm03178   2년 전

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

sop369   2년 전

다들 너무 감사합니다 ㅠㅠ

djm03178   1년 전

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

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

ldgeao99   1년 전

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

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

아래와 같은 식으로 말이죠

int a[10] (x)

int a[10000] (o)

roeniss   1년 전

djm03178님 무병장수하세요

djm03178   8달 전

하나 더 추가합니다.

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

kdog1503   8달 전

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

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   7달 전

백준에서 사용하는 각 언어의 컴파일러 / 실행옵션을 그대로 재현하면 버그 추적에 더 도움이 됩니다.
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   5달 전

djm03178

너무 감사합니다!!.. 

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

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

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