malloc
메모리 블록을 할당합니다.
구문
void *malloc(
size_t size
);
매개 변수
size
할당할 바이트입니다.
반환 값
malloc
는 할당된 공간에 대한 void 포인터를 반환하거나 NULL
사용 가능한 메모리가 부족한 경우 반환합니다. void
가 아닌 형식에 대한 포인터를 반환하려면 반환 값에 형식 캐스팅을 사용하세요. 반환 값이 가리키는 스토리지 공간은 기본 맞춤보다 작거나 같은 맞춤 요구 사항이 있는 모든 개체 형식의 스토리지에 적합하게 정렬됩니다. (Visual C++에서 기본 맞춤은 8바이트 또는 8바이트에 double
필요한 맞춤입니다. 64비트 플랫폼을 대상으로 하는 코드에서는 16바이트입니다.) 맞춤 요구 사항이 더 큰 개체(예: SSE 형식 __m128
및 __m256
및 8보다 큰 위치를 n
사용하여 선언된 형식)에 스토리지를 할당하는 데 __declspec(align( n ))
사용합니다_aligned_malloc
. size
가 0이면 malloc
는 힙에서 길이가 0인 항목을 할당하고 해당 항목에 대한 유효한 포인터를 반환합니다. 요청된 메모리의 양이 작은 경우에도 malloc
의 반환 값을 항상 확인하세요.
설명
malloc
함수는 size
바이트 이상의 메모리 블록을 할당합니다. 이 블록은 맞춤 및 유지 관리 정보에 필요한 공간이기 때문에 size
보다 클 수 있습니다.
메모리 할당에 실패하거나 요청된 메모리의 양이 _HEAP_MAXREQ
를 초과하는 경우 malloc
는 errno
를 ENOMEM
으로 설정합니다. 이 코드 및 기타 오류 코드에 대한 자세한 내용은 , _doserrno
, _sys_errlist
및 _sys_nerr
를 참조하세요errno
.
시작 코드는 malloc
를 사용하여 _environ
, envp
및 argv
변수에 대해 스토리지를 할당합니다. 다음 함수 및 해당 와이드 문자 함수도 malloc
를 호출합니다.
C++ _set_new_mode
함수는 새 처리기 모드를 malloc
설정합니다. 새 처리기 모드는 실패 시 malloc
이 _set_new_handler
에서 설정한 대로 새 처리기 루틴을 호출하는지 여부를 나타냅니다. 기본적으로 malloc
메모리를 할당하지 못한 경우 새 처리기 루틴을 호출하지 않습니다. malloc
가 메모리 할당에 실패한 경우 malloc
이 new
연산자가 같은 이유로 실패했을 때 수행하는 것과 동일한 방식으로 새 처리기 루틴을 호출하도록 이 기본 동작을 재정의할 수 있습니다. 기본값을 재정의하려면 프로그램 초기에 호출 _set_new_mode(1)
하거나 링크 옵션 참조)으로 NEWMODE.OBJ
연결합니다.
애플리케이션이 C 런타임 라이브러리 malloc
의 디버그 버전과 연결되면 .로 확인 _malloc_dbg
됩니다. 디버깅 프로세스 중에 힙을 관리하는 방법에 대한 자세한 내용은 CRT 디버그 힙 세부 정보를 참조하세요.
malloc
가 표시 __declspec(noalias)
되고 .__declspec(restrict)
이러한 특성은 함수가 전역 변수를 수정하지 않도록 보장되고 반환된 포인터가 별칭이 지정되지 않음을 의미합니다. 자세한 내용은 noalias
및 restrict
를 참조하세요.
기본적으로 이 함수의 전역 상태는 애플리케이션으로 범위가 지정됩니다. 이 동작을 변경하려면 CRT 전역 상태를 참조하세요.
요구 사항
루틴에서 반환된 값 | 필수 헤더 |
---|---|
malloc |
<stdlib.h> 및 <malloc.h> |
호환성에 대한 자세한 내용은 호환성을 참조하세요.
라이브러리
모든 버전의 C 런타임 라이브러리입니다.
예시
// crt_malloc.c
// This program allocates memory with
// malloc, then frees the memory with free.
#include <stdlib.h> // For _MAX_PATH definition
#include <stdio.h>
#include <malloc.h>
int main( void )
{
char *string;
// Allocate space for a path name
string = malloc( _MAX_PATH );
// In a C++ file, explicitly cast malloc's return. For example,
// string = (char *)malloc( _MAX_PATH );
if( string == NULL )
printf( "Insufficient memory available\n" );
else
{
printf( "Memory space allocated for path name\n" );
free( string );
printf( "Memory freed\n" );
}
}
Memory space allocated for path name
Memory freed