[ 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

    이미지

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 와... 어렵긴 했지만 만들어 주신 예문덕분에 이해가 잘됬어요!! 너무 감사합니다!! 알 수 없는 사용자 2020.9.8 14:15

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)