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

ssmjung님의 프로필 이미지
ssmjung

작성한 질문수

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

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

섹션4 자료 자체와 정렬된 인덱스 분리 내용 질문

해결된 질문

작성

·

143

0

안녕하십니까? 강사님!

초보자의 문득 드는 생각으로 질문드립니다.

"섹션4 자료 자체와 정렬된 인덱스 분리" 강의의 MakeIndexAge함수 내용중에

 

USERDATA** aList;

aList = malloc(sizeof(USERDATA*) * GetListCount());

memset(aList, 0, sizeof(USERDATA*) * GetListCount());

 

위의 코드를 그냥 이렇게 작성하면 안될까요?

USERDATA** aList[GetListCount()]={0};

잘몰라서 드리는 질문입니다.

이해해 주시길 바랍니다

수고하십시오

 

답변 2

0

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

배열의 크기는 코드가 작성되는 시점 (컴파일 타임)에 이미 결정되어야 합니다. 그런데 문제는 프로그램이 작동하는 과정에서 인덱스의 크기는 달라질 수 있다는 점 입니다. 이 때문에 동적 할당하는 것입니다. 애석하게도

USERDATA** aList[GetListCount()]={0};

제안하신 형식은 C언어 문법에서 허용되지 않습니다.

다만, 이런 생각은 매우 바람직한 아이디어 이며 프로그래밍 언어 및 컴퓨터 구조를 이해하는 것에 있어 매우 도움되는 질문이라 할 수 있습니다. 참고하시기 바랍니다. 😄

0

안녕하세요, 인프런 AI 인턴입니다.

ssmjung님의 질문은 섹션 4에서 소개된 MakeIndexAge 함수의 특정 코드 구현 방식에 대한 것입니다. 질문하신 코드의 핵심은 동적 할당 대신 자동 할당(스택 할당)을 사용하여 USERDATA** 타입의 배열을 초기화하는 것에 관한 것입니다.

이와 비슷한 질문에 대한 답변을 찾아본 결과, 직접적으로 같은 질문을 다룬 자료는 없으나, USERDATA** 반환형과 관련하여 강의에서 질문된 내용을 찾았습니다. 질문 “자료 자체와 정렬된 인덱스 분리 강의에서 질문”에 대한 답변에서 MakeIndexAge 함수의 존재 이유 및 구현 방식에 대한 일반적인 설명이 포함되어 있을 수 있습니다. 그러나 특정한 코드 구현 방식(즉, 배열을 스택에 할당하는 방식)에 대한 직접적인 답변은 아닙니다.

주어진 코드 조각 USERDATA** aList[GetListCount()] = {0};에 대해 말씀드리면, C언어에서는 변수 크기로 배열의 크기를 지정하는 가변 길이 배열(VLA)을 사용할 수 있지만, 이는 C99 표준에서 도입된 것으로 특정 컴파일러나 모드에서만 지원됩니다. 또한 이 방식은 배열을 스택에 할당하게 되므로, 큰 크기의 데이터를 다룰 경우 스택 오버플로우를 유발할 수 있습니다.

대조적으로 malloc을 사용하는 동적 할당 방식은 힙에 메모리를 할당하여 이러한 제한을 피할 수 있으며, 할당된 메모리의 크기를 런타임에 결정할 수 있다는 장점이 있습니다. 따라서, USERDATA** aList = malloc(sizeof(USERDATA*) * GetListCount());와 같은 코드는 메모리 할당의 유연성과 안정성 측면에서 선호됩니다.

직접적으로 ssmjung님의 질문에 대답하는 자료를 찾지 못했으므로, 여러분의 이해도를 높이고 동적 할당과 스택 할당의 차이점에 대해 배울 수 있는 기회로 삼으시길 바랍니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

ssmjung님의 프로필 이미지
ssmjung

작성한 질문수

질문하기