인프런 커뮤니티 질문&답변

scryid님의 프로필 이미지
scryid

작성한 질문수

독하게 C를 배운 사람을 위한 선형 자료구조

자료 자체와 정렬된 인덱스 분리 (인덱스 정렬)

인덱스정렬 강의, 04_ListAndIndex질문드립니다.

해결된 질문

작성

·

95

·

수정됨

0

안녕하세요 강사님

04_ListAndIndex의 원본 코드의 signleList.c파일의

SearchByIndexAgeRange함수의 354번째 줄 라인에서

int length = idxMax - idxMin + 1;
USERDATA** aSelected = malloc(sizeof(void*) * length);
memcpy(aSelected, aList + idxMin, sizeof(void*) * length);

와 같이 aSelected의 리턴 타입이 USERDATA** 인데

왜 malloc으로 생성할때, "malloc(sizeof(void*) * length);"로

왜 void*의 size만큼 생성해주는지 잘 모르겠습니다.

USERDATA** aSelected = malloc(sizeof(USERDATA*) * length);

다음 위의 코드처럼 "malloc(sizeof(USERDATA*) length);"즉, USERDATA*의 size가되어야 알맞지 않나요??

아니면 USERDATA* void* 모두 크기가 8byte라서 메모리가 할당되는 크기가 같은건가요?? 제가 알고 있는 개념이 맞는걸까요??

강의 잘 듣고있습니다 감사합니다.

답변 1

1

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

포인터가 가리키는 대상 자료형이 무엇이건 포인터 변수의 크기는 같습니다. 32비트 시스템이면 32비트, 64비트 시스템이면 64비트 크기를 갖습니다. 그러므로 USERDATA*나 void*의 크기는 같습니다. 따라서 malloc() 함수로 할당받는 메모리의 크기는 동일합니다.

그런데 제가 굳이 void*를 사용한 이유는 데이터 추상화를 적용하려는 의도 때문입니다. 이에 대해서는 ADT에 대한 설명에서 이어집니다. 참고하시기 바랍니다. 😄

scryid님의 프로필 이미지
scryid
질문자

감사합니다

scryid님의 프로필 이미지
scryid

작성한 질문수

질문하기