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:
|
|||
|
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。有关更多信息,请参见 平台调用示例。