inflearn logo
강의

Khóa học

Chia sẻ kiến thức

C ngôn ngữ cho những người học nghiêm túc về cấu trúc dữ liệu tuyến tính

Tách rời dữ liệu chính và index đã sắp xếp (sắp xếp index)

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

Đã giải quyết

252

ssmjung

6 câu hỏi đã được viết

0

안녕하십니까? 강사님!

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

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

 

USERDATA** aList;

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

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

 

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

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

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

이해해 주시길 바랍니다

수고하십시오

 

c 코딩-테스트 알고리즘 vc++

Câu trả lời 2

0

nullnull8537

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

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

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

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

0

communityai8509

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

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

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

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

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

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

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

05_adtFileIO 개정이력에 대한 질문

0

42

2

마지막 열의 노드를 삭제하였을때 읽기 엑세스 위반 발생 건

0

61

2

첫번째 루프에서 최소값을 못찾았는데 계속 진행하는 이유가 무엇인가요?

0

47

1

[질문]: [섹션4] -> [2중 연결 리스트로 전환] -> [21:30]

0

130

2

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

0

125

1

예제는 어디서 다운로드 받을 수 있나요?

0

178

2

04_MultiIndex 예제에서 질문이 있습니다

0

120

1

헤드노드에 관해..

0

231

3

AddNewNode 함수 구현시 질문입니다.

0

160

2

Event Loop

0

191

1

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

0

192

1

CPU의 다른 이름 Machine 강의 질의

0

273

4

스택의 POP코드 질문드립니다.

0

259

1

adtFileIO 예제코드관련 질문 있습니다.

0

170

1

ADT강의 관련 질문 있습니다.

0

231

2

RangeSearch002 의 singlelist.c 파일 중 질문 있습니다.

0

192

1

자료 자체와 정렬된 인덱스 분리 강의에서 질문

0

234

2

구현 연습에 대한 개인적 의문

0

279

1

05_adtFileIO 프로젝트 문의

0

318

2

CLI UI적용 강의에서 질문드립니다.

0

333

1

SearchToRemove와 RemoveNode가 분리되어야 할 필요가 있을까요?

0

294

1

05_adtFileIO 프로젝트 문의

0

257

1

자료 자체와 정렬된 인덱스 분리 (인덱스 정렬) - 인덱스 범위 코드에 버그가 있어서 질문 드립니다.

0

304

2

강의자료 관련

0

203

1