【C语言】malloc和realloc的区别以及使用
ANSI C说明了三个用于存储空间动态分配的函数 (1) malloc分配指定字节数的存储区。此存储区中的初始值不确定 (2) calloc为指定长度的对象,分配能容纳其指定个数的存储空间。该空间中的每一位(bit)都初始化为0 (3) realloc 更改以前分配区的长度(增加或减少)。当增加长度时,可能需将以前分配区的内容移到另一个足够大的区域,而新增区域内的初始值则不确定 .分配函数时再分配 realloc() 使我们可以增、减以前分配区的长度(最常见的用法是增加该区)。 如果先分配一个可容纳长度为512的数组的空间,并在运行时填充它,但又发现空间不够,则可调用realloc扩充该存储空间。 如果在该存储区后有足够的空间可供扩充,则可在原存储区位置上向高地址方向扩充,并返回传送给它的同样的指针值。 如果在原存储区后没有足够的空间,则realloc分配另一个足够大的存储区,将现存的5 1 2个元素数组的内容复制到新分配的存储区。 因为这种存储区可能会移动位置,所以不应当使用任何指针指在该区中。 注意,realloc的最后一个参数是存储区的newsize(新长度),不是新、旧长度之差。作为一个特例,若ptr是一个空指针,则realloc的功能与malloc相同,用于分配一个指定长度newsize的存储区。 这些分配例程通常通过sbrk(2)系统调用实现。该系统调用扩充(或缩小