malloc

分配内存块。

void *malloc(
   size_t size 
);

参数

  • size
    要分配的字节。

返回值

如果内存充足,则 malloc 返回无效的指针给分配的空间或 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_MAXREQ,那么 malloc 设置 errno 为 ENOMEM。 有关这和其他错误代码的信息,请参阅 errno、_doserrno、_sys_errlist 和 _sys_nerr

启动代码使用 malloc 将存储分配给 _environ、envp 和 argv。 以下函数及其宽字符副本也调用 malloc。

calloc

fscanf

_getw

setvbuf

_exec 函数

fseek

_popen

_spawn 函数

fgetc

fsetpos

printf

_strdup

_fgetchar

_fullpath

putc

系统

fgets

fwrite

putchar

_tempnam

fprintf

getc

_putenv

ungetc

fputc

getchar

puts

vfprintf

_fputchar

_getcwd

_putw

vprintf

fputs

_getdcwd

scanf

 

fread

获取

_searchenv

 

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

要求

例程

必需的标头

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" );
   }
}
  

.NET Framework 等效项

不适用。若要调用标准 C 函数,请使用 PInvoke。有关详细信息,请参阅 平台调用示例

请参见

参考

内存分配

calloc

free

realloc

_aligned_malloc