malloc ,free, realloc 和calloc

这四个函数都在#include<stdlib.h>里面声明。

1.malloc

形式:void  *malloc(size_t size);

说明:malloc 分配的内存是连续的存储块,而不是分开的。系统无法想向malloc提供更多的内存,malloc就返回一个NULL指针。

2.free

形式: void free(void *pointer);

说明:free的参数要么是NULL,要么是一个先前从malloc , realloc 和calloc的返回值。

3.void *calloc(size_t num_elements,size_t element_size);

4.void realloc(void *ptr,size_t new_size);

说明:calloc也用于分配内存.malloc和calloc之间的主要区别是后者在返回指向内存的指针之前把它初始化为0.这个初始化常常能带来方便,但如果你的程序只是想把一些值存储到数组中, 那么这个初始化过程纯属浪费时间。calloc 和malloc 之间另一个较小的区别是它们请求内存数量的方式不同。calloc 的参数包括所需元素的数量和每个元素的字节数。根据这些值,它能够计算出总共需委分配的内存。
realloc函数用于修改一个原先已经分配的内存块的大小。使用这个函数,你可以使一块内存扩大或缩小。如果它用于扩大一个内存块,那么这块内存原先的内容依然保留,新增加的内存添加到原先内存块的后面,新内存并未以任何方法进行初始化。如果它用于缩小个内存块, 该内存块尾业的部分内存便被拿掉,剩余部分内存的原先内容依然保留。
如果原先的内存块无法改变大小,realloc 将分配另块正 确大小的内存,并把原先那块内存的家有制到新的块上。因此,在使用realloc,你就不能再使用指向旧内存的指针,而是应该改realloc所返回的新指针。
后如果realloc的数的第1 个参数是NULL.那么它的行为malloc就模一样。

猜你喜欢

转载自blog.csdn.net/weixin_42528089/article/details/84322979