연습문제 38.6 번 삼중포인터 malloc
, 이 혜선님이 작성안녕하세요.
좋은 강좌 진행해 주셔서 감사드립니다. 많은 도움 받고 있습니다.
문제를 풀다가 의문점이 생겨서 여쭙니다.
38.6번에서 삼중포인터에 메모리를 할당하는 부분이 잘못되어있는 것은 아닌지요.
long long ***m= malloc(sizeof(long long *) *2);
이렇게 나와있는데, 높이를 저장할 메모리는 pointer to pointer t long long 이므로
long long ***m = malloc(sizeof(long long **) * 2)
이렇게 되어야 하지 않나요?
32bit컴퓨터로 돌려서인지 두개 다 결과 값은 갖게 나옵니다.
회신: 연습문제 38.6 번 삼중포인터 malloc
, 도장_ 관리자님이 작성삼중포인터에 할당하는 부분은
long long ***m = malloc(sizeof(long long **) * 2)
처럼 작성하는 것이 맞습니다.
단, 포인터는 주솟값이므로 주솟값의 크기는 동일합니다.(32비트, 64비트 플랫폼에 따라 달라지는 부분은 85.3 데이터 모델 참조하세요)
따라서 sizeof( long long* )로 해도 결과는 같습니다.
struct a { int a; int b; int c; }에서 sizeof(struct a)는 12바이트가 되지만, sizeof(struct *a)는 4바이트가 됩니다. 주솟값의 크기이기 때문입니다.(Unit 48, 49 참조)