malloc

分配内存块。

语法

void *malloc(
   size_t size
);

参数

size
要分配的字节数。

返回值

malloc 会返回指向已分配空间的 void 指针,如果可用内存不足,则返回 NULL。 若要返回指向类型而非 void 的指针,请在返回值上使用类型转换。 返回值指向的存储空间会适当对齐,以存储对齐要求小于或等于基本对齐要求的任意对象类型。 (在 Visual C++ 中,基本对齐是 double 或 8 个字节所需的对齐。在面向 64 位平台的代码中,是 16 个字节。)使用 _aligned_malloc 为具有更大对齐要求的对象分配存储空间,例如 SSE 类型 __m128__m256,以及使用 __declspec(align( n ))(其中 n 大于 8)声明的类型。 如果 size 为 0,则 malloc 在堆中分配零长度的项并向该项返回有效的指针。 即使请求的内存量较小,也要始终检查 malloc 的返回值。

注解

malloc 函数分配至少为 size 个字节的内存块。 由于对齐和维护信息所需的空间,该块可能大于 size 个字节。

如果内存分配失败或请求的内存量超过 _HEAP_MAXREQmalloc 会将 errno 设置为 ENOMEM。 有关此错误代码和其他错误代码的信息,请参阅 errno_doserrno_sys_errlist_sys_nerr

启动代码使用 malloc_environenvpargv 变量分配存储空间。 以下函数及其宽字符对应项也调用 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)。 这些属性意味着该函数保证不会修改全局变量,并且返回的指针不使用别名。 有关详细信息,请参阅 noaliasrestrict

默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 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

另请参阅

内存分配
calloc
free
realloc
_aligned_malloc