c 질문있어요! 쉬우시겠지만 조금 봐주세요! EXC_BAD_ACCESS
조회수 519회
#include <stdio.h>
int main(void) {
int aList[5] = {40, 20, 30, 40, 50};
int nMax = aList[0];
for(int i=0; aList[i] != '\n'; i++) {
if(nMax < aList[i]) nMax = aList[i];
}
printf("MAX: %d\n", nMax);
}
안녕하세요! 이번에 c를 새로 공부하고 있는 코린이 입니다!
배열을 공부하는데 여기 for문에서 에러가 났어요!
(배열속 숫자중 최댓값을 구하려는 거예요!)
Thread 1: EXC_BAD_ACCESS (code=1, address=0x7ffeefc00000)
라는데요.
aList[i] != '\n'
이 부분을 보고 그런거같은데, 왜 이게 에러가 되는지 모르겠어요. 단순히 (i < 5)
라고 해도 되겠지만 조금더 좋게 만들려고 이렇게 하려는데, 에러난 이유가 어떤건지 알려주세요.
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
1 답변
-
i<5
는i
가5
가 되면 거짓이 됩니다. 그래서, 4까지 돌고 종료가 되죠.aList[i] != '\n'
은i
가 아무리 증가해도 계속 참입니다.i
가 계속 증가하게 됩니다.aList
는aList[4]
까지만 준비되어 있고, 그 이상은 준비되어 있지 않습니다. 그래서, 디버그빌드에서는aList[5]
가 되어, 그 내용을 읽으려는 순간에, 지정한 배열의 크기를 넘어서 접근했기 때문에,BAD_ACCESS
라는 에러가 발생했을 겁니다.- 배열의 맨 마지막은 \0 으로 채워진다고 들었는데 그건 문자형 배열일때만 해당되는건가요??? 알 수 없는 사용자 2020.8.27 17:37
- 1. 네. 문자열만 그래요. 2. '\0' 과 '\n' 은 다른거에요. nowp 2020.8.28 09:29
- 감사합니다!!!! >.< 알 수 없는 사용자 2020.9.2 16:59
댓글 입력