malloc, calloc, realloc

ORCASUIT·2023년 11월 6일

C 프로그래밍 언어에서 동적 메모리 할당은 malloc, calloc, 그리고 realloc 함수를 이용하여 수행할 수 있습니다. 이들은 stdlib.h 헤더 파일에 선언되어 있습니다. 각각의 함수는 다음과 같은 용도로 사용됩니다:

malloc

malloc 함수는 지정된 크기의 메모리 블록을 할당합니다. 할당된 메모리는 초기화되지 않으며, 이전에 사용된 데이터가 남아 있을 수 있습니다. 사용법은 다음과 같습니다:

void* malloc(size_t size);
  • size: 할당할 메모리의 바이트 단위 크기입니다.
  • 반환값: 할당된 메모리 블록에 대한 포인터를 반환합니다. 할당에 실패하면 NULL을 반환합니다.

예시:

int *p = (int*)malloc(10 * sizeof(int)); // 10개의 int 크기만큼의 메모리를 할당

calloc

calloc 함수는 지정된 수의 요소에 대해 메모리를 할당하고, 모든 비트를 0으로 초기화합니다. malloc과 다르게 두 개의 인자를 받습니다:

void* calloc(size_t num, size_t size);
  • num: 할당할 요소의 개수입니다.
  • size: 각 요소의 바이트 단위 크기입니다.
  • 반환값: 할당 및 초기화된 메모리 블록에 대한 포인터를 반환합니다. 할당에 실패하면 NULL을 반환합니다.

예시:

int *p = (int*)calloc(10, sizeof(int)); // 10개의 int를 0으로 초기화하여 메모리를 할당

realloc

realloc 함수는 이전에 malloc이나 calloc으로 할당된 메모리 블록의 크기를 변경합니다. 만약 새로운 크기가 더 크면, 추가된 메모리는 초기화되지 않습니다. 만약 더 작다면, 초과하는 메모리는 잘립니다.

void* realloc(void* ptr, size_t newSize);
  • ptr: 크기를 변경할 기존 메모리 블록에 대한 포인터입니다. NULL일 경우, malloc과 같은 방식으로 동작합니다.
  • newSize: 새로운 메모리 블록의 크기입니다.
  • 반환값: 재할당된 메모리 블록에 대한 포인터를 반환합니다. 할당에 실패하면 원래 블록은 불변이며 NULL을 반환합니다.

예시:

int *p = (int*)malloc(10 * sizeof(int)); // 초기 할당
p = (int*)realloc(p, 20 * sizeof(int)); // 크기를 20개의 int로 변경

각 함수에서 반환된 메모리는 반드시 free 함수를 사용하여 해제해야 합니다. 메모리 누수를 방지하기 위해서는 프로그래머가 할당한 메모리를 관리하는 것이 중요합니다.

0개의 댓글