[ C ] 다중포인터 질문이요! 쉬우시겠지만 이해가 안가서요. Thread 1: EXC_BAD_ACCESS (code=EXC_I386_GPFLT)
조회수 836회
#include <stdio.h>
int main() {
char* astrList[3] = {"Hello", "World", "String"};
char* *ppstrList = astrList;
char** *pppstrList = &ppstrList;
puts(*pppstrList[0]);
puts(pppstrList[2][0]);
return 0;
}
혼자 c를 공부하고 있어요.. 마지막 puts()
에서 Thread 1: EXC_BAD_ACCESS (code=EXC_I386_GPFLT)
에러가 났는데 이유를 모르겠어서요..
책을 보고 하고 있는데 예제에서
puts(* (*(pppstrList + 2) + 0 ) );
라고 나와있는걸 이렇게 바꿔봐도 되나.. 해서 해본거였어요. 왜(?) 이런 에러가 뜨는걸까요?
-> 연산결과는 char*
일꺼구.. 그럼 puts()
로 해도 문자열이 잘 나와야 할껀데...
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
1 답변
-
아마도
puts(*(*(pppstrList + 2) + 0));
가puts(*(*(pppstrList + 0) + 2));
의 오타일거 같습니다.아래 코드 참고하세요. 참고로 밑에 코드 하나 더 추가했습니다.
- 코드 1
#include <stdio.h> int main() { const char* astrList[3] = { "Hello", "World", "String" }; const char** ppstrList = astrList; const char*** pppstrList = &ppstrList; puts(*pppstrList[0]); puts(pppstrList[0][2]); puts(*(*(pppstrList + 0) + 2)); return 0; }
- 결과
아래 코드는 위 코드를 조금 변경해 본 것입니다.
- 코드 2
#include <stdio.h> int main() { const char* astrList[3] = { "Hello", "World", "String" }; const char* bstrList[3] = { "Hi", "Friend", "Good luck" }; const char** ppstrList[2] = { astrList,bstrList }; const char*** pppstrList = ppstrList; puts(*pppstrList[0]); puts(pppstrList[0][2]); puts(*(*(pppstrList + 0) + 2)); puts(pppstrList[1][2]); return 0; }
- 결과 2
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력