Namespaces
Variants

malloc

From cppreference.net
定义于头文件 <stdlib.h>
void * malloc ( size_t size ) ;

分配 size 字节的未初始化存储空间。

如果分配成功,返回一个指针,该指针对任何具有 基础对齐 要求的对象类型都适当对齐。

如果 size 为零, malloc 的行为由实现定义。例如,可能返回空指针。或者,也可能返回非空指针;但此类指针不应被 解引用 ,且应传递给 free 以避免内存泄漏。

malloc 是线程安全的:其行为表现为仅访问通过其参数可见的内存位置,而不访问任何静态存储。

先前调用 free free_sized free_aligned_sized (C23起) realloc 来释放内存区域的操作,会与分配同一或部分同一内存区域的 malloc 调用 同步发生 。该同步在释放函数对内存的任何访问之后、且在 malloc 对内存的任何访问之前发生。对于每个特定内存区域的所有分配和释放函数操作,存在一个单一的全序关系。

(C11起)

目录

参数

size - 要分配的字节数

返回值

成功时,返回指向新分配内存起始位置的指针。为避免内存泄漏,必须使用 free() realloc() 释放返回的指针。

失败时,返回空指针。

示例

#include <stdio.h>   
#include <stdlib.h> 
int main(void) 
{
    int *p1 = malloc(4*sizeof(int));  // 分配足够容纳4个整数的数组空间
    int *p2 = malloc(sizeof(int[4])); // 相同功能,直接指定类型
    int *p3 = malloc(4*sizeof *p3);   // 相同功能,无需重复类型名
    if(p1) {
        for(int n=0; n<4; ++n) // 填充数组
            p1[n] = n*n;
        for(int n=0; n<4; ++n) // 打印数组内容
            printf("p1[%d] == %d\n", n, p1[n]);
    }
    free(p1);
    free(p2);
    free(p3);
}

输出:

p1[0] == 0
p1[1] == 1
p1[2] == 4
p1[3] == 9

参考文献

  • C17 标准 (ISO/IEC 9899:2018):
  • 7.22.3.4 malloc 函数 (页: 254)
  • C11 标准 (ISO/IEC 9899:2011):
  • 7.22.3.4 malloc 函数 (p: 349)
  • C99标准(ISO/IEC 9899:1999):
  • 7.20.3.3 malloc函数(页码:314)
  • C89/C90 标准 (ISO/IEC 9899:1990):
  • 4.10.3.3 malloc 函数

参见

释放先前分配的内存
(函数)
C++ 文档 关于 malloc