Namespaces
Variants

malloc

From cppreference.net
헤더 파일에 정의됨 <stdlib.h>
void * malloc ( size_t size ) ;

size 바이트의 초기화되지 않은 저장 공간을 할당합니다.

할당이 성공하면, 기본 정렬 을 갖는 모든 객체 유형에 적합하게 정렬된 포인터를 반환합니다.

만약 size 가 0이면, malloc 의 동작은 구현에 따라 정의됩니다. 예를 들어, 널 포인터가 반환될 수 있습니다. 또는 널이 아닌 포인터가 반환될 수 있습니다; 그러나 그러한 포인터는 역참조(dereferenced) 되어서는 안 되며, 메모리 누수를 피하기 위해 free 에 전달되어야 합니다.

malloc 는 스레드 안전합니다: 인자를 통해 접근 가능한 메모리 위치만 접근하고 정적 저장소는 접근하지 않는 것처럼 동작합니다.

메모리 영역을 해제하는 free , free_sized , 그리고 free_aligned_sized (C23부터) 또는 realloc 의 이전 호출은 동기화됩니다 동일한 메모리 영역 전체 또는 일부를 할당하는 malloc 호출과. 이 동기화는 해제 함수에 의한 메모리 접근 이후, 그리고 malloc 에 의한 메모리 접근 이전에 발생합니다. 각 특정 메모리 영역에 대해 동작하는 모든 할당 및 해제 함수들의 단일 전체 순서가 존재합니다.

(C11부터)

목차

매개변수

size - 할당할 바이트 수

반환값

성공 시, 새로 할당된 메모리의 시작 포인터를 반환합니다. 메모리 누수를 방지하기 위해 반환된 포인터는 free() 또는 realloc() 로 해제해야 합니다.

실패 시, 널 포인터를 반환합니다.

예제

#include <stdio.h>   
#include <stdlib.h> 
int main(void) 
{
    int *p1 = malloc(4*sizeof(int));  // 4개의 int 배열을 위한 충분한 공간 할당
    int *p2 = malloc(sizeof(int[4])); // 동일, 타입을 직접 명시
    int *p3 = malloc(4*sizeof *p3);   // 동일, 타입 이름 반복 없이
    if(p1) {
        for(int n=0; n<4; ++n) // 배열 채우기
            p1[n] = n*n;
        for(int n=0; n<4; ++n) // 다시 출력하기
            printf("p1[%d] == %d\n", n, p1[n]);
    }
    free(p1);
    free(p2);
    free(p3);
}

출력:

p1[0] == 0
p1[1] == 1
p1[2] == 4
p1[3] == 9

참고문헌

  • C17 표준 (ISO/IEC 9899:2018):
  • 7.22.3.4 malloc 함수 (p: 254)
  • C11 표준 (ISO/IEC 9899:2011):
  • 7.22.3.4 malloc 함수 (p: 349)
  • C99 표준 (ISO/IEC 9899:1999):
  • 7.20.3.3 malloc 함수 (p: 314)
  • C89/C90 표준 (ISO/IEC 9899:1990):
  • 4.10.3.3 malloc 함수

참고 항목

이전에 할당된 메모리를 해제합니다
(함수)