1. malloc函数
// 定义于头文件<stdlib.h>中
void* maalloc (size_t size);
/* 返回值
成功时,返回指向新分配内存的指针。为避免内存泄漏,必须用 free() 或 realloc() 解分配返回的指针。
失败时,返回空指针。
*/
分配size字节的未初始化内存。
若分配成功,则返回任何拥有基础对齐的对象类型对齐的指针。
若 size 为零,则 malloc 的行为是实现定义的。例如可返回空指针。亦可返回非空指针;但不应当解引用这种指针,而且应将它传递给 free 以避免内存泄漏。
malloc 是线程安全的:它表现得如同只访问通过其参数可见的内存区域,而非任何静态存储。
令 free 或 realloc 归还一块内存区域的先前调用,同步于令 malloc 分配相同或部分相同的内存区域的调用。此同步出现于任何通过解分配函数所作的内存访问后,和任何 malloc 所作的内存访问前。所有操作每块特定内存区域的分配和解分配函数有单独全序。(C11起)
示例:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *p1 = malloc(4*sizeof(int)); // 足以分配 4 个 int 的数组
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) // 打印出来