malloc

分配内存块。

void *malloc(
   size_t size 
);

参数

  • size
    分配的字节。

返回值

,如果有可用,内存不足malloc 返回了无效的指针传递给分配空间或 NULL 。 除了 void外,若要返回指针为类型,请使用在一个返回值的类型转换。 存储空间指向返回值以确保为任何类型的对象存储正确对齐。 如果范围为 0, malloc 分配堆中的零长度的项目并返回了有效的指针该项目。 始终检查从 malloc的返回,因此,即使内存请求的数据量很小。

备注

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

malloc 设置 errno 到 ENOMEM ,如果内存分配失败,或如果内存请求的数据量超过 _HEAP_MAXREQ。 有关此更改和其他错误代码的信息,请参见 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

放置

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 (请参见 LINK选项)。

当应用程序使用 C 运行库时的调试版本链接, malloc 解析为 _malloc_dbg。 有关堆方式的更多信息管理在调试过程中,请参见 CRT 调试堆

malloc 标记为 __declspec(noalias) 和 __declspec(restrict),这意味着函数保证不修改全局变量,因此,返回的指针没有抗锯齿。 有关更多信息,请参见 noalias限制

要求

实例

必需的头

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