// 失败会返回NULL
void *malloc(size_t size);
void free(void *pointer);
malloc
的参数size
为需要分配的字节数(不会初始化)。标准表示一个void *
类型的指针可以转换为其他任何类型的指针,但最好对malloc
的返回做强制类型转换(为了使用某些老式编译器)。
malloc
分配内存时会将比实际申请内存大几个字节,这几个字节是用来记录这块内存信息的(如大小),一般直接存在指针的左边。free
函数会读取这块信息,所以free
的参数要么是NULL
(不会产生任何效果),要么是malloc
、calloc
或 realloc
返回的值。
void *calloc(size_t num_elements, size_t element_size);
void *realloc(void *ptr, size_t new_size);
calloc
用于申请内存,在返回指向内存的地址之前会把内存初始化为零。
realloc
函数用于修改一个原先已分配的内存块的大小,如果用于扩大一个内存块,这个块原先内容依然保留,新增内容添加到原先内存块的后面,新内存不会初始化;如果用于缩小一个内存块,该内存块的尾部内容会被移除,剩余内容依然保留。
如果原先内存无法改变大小,realloc
将分配一块新的内存,并复制原先内存的内容,所以每次都应使用realloc
返回的新指针。
- older
- Newer