Page 47 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 47
때문입니다. 그런데 마치 변수를 사용해서 배열을 선언한 것처럼 할 수도 있습니다. 필요할
때 메모리를 확보하고, 불필요해지면 메모리를 해제하면 필요한 요소 개수의 배열을 언제든
지 자유롭게 만들 수 있습니다. 지금부터 그 방법을 알아보겠습니다.
메모리 할당 기간과 동적 객체 생성
메모리를 확보하기 위해 제공되는 함수는 calloc 함수와 malloc 함수입니다.
calloc 함수
헤더 #include <stdlib.h>
형식 void *calloc(size_t nmemb, size_t size);
크기가 size인 자료가 nmemb개만큼 들어갈 메모리를 할당합니다. 할당한 메모리 영역은 모든 비트가 0
해설
으로 초기화됩니다.
반환값 메모리 할당에 성공하면 할당한 영역의 첫 번째 포인터를 반환하고, 실패하면 NULL 포인터를 반환합니다.
malloc 함수
헤더 #include <stdlib.h>
형식 void *malloc(size_t size);
해설 크기가 size인 메모리를 할당합니다. 할당한 메모리의 값은 정의되지 않습니다.
반환값 메모리 할당에 성공하면 할당한 영역의 첫 번째 포인터를 반환하고, 실패하면 NULL 포인터를 반환합니다.
포인터가 이해되지 않으면 보충수업 2-2(53쪽)를 먼저 읽어보세요.
조금만 더! NULL에 대해 조금 더 알고 싶어요!
NULL은 stdio.h 파일에 매크로로 정의되어 있고 값이 없음을 의미합니다.
#define NULL((void *)0) /*stdio.h에 선언되어 있음 */
선언(declaration)은 컴파일러에게 대상에 대한 정보를 알려줍니다. 다만 실제 내용을 할당하지 않으므로
메모리를 사용하지 않습니다. 하지만 정의(definition)는 컴파일러에게 대상의 실제 내용을 생성하게 합니
다. 실제 내용을 생성하고 할당하므로 메모리를 사용합니다.
02• 기본 자료구조 47