11.3 calloc和realloc
另外还有两个内存分配函数:calloc和realloc。它们的原型如下所示:
void *calloc( size_t num_elements, size_t element_size );
void realloc( void *ptr, size_t new_size );
calloc也用于分配内存。malloc和calloc之间的主要区别是后者在返回指向内存的指针之前把它初始化为0。这个初始化常常能带来方便,但如果你的程序只是想把一些值存储到数组中,那么这个初始化过程纯属浪费时间。calloc和malloc之间另一个较小的区别是它们请求内存数量的方式不同。calloc的参数包括所需元素的数量和每个元素的字节数。根据这些值,它能够计算出总共需要分配的内存。
realloc函数用于修改一个原先已经分配的内存块的大小。使用这个函数,可以使一块内存扩大或缩小。如果它用于扩大一个内存块,那么这块内存原先的内容依然保留,新增的内存添加到原先内存的后面,新内存并未以任何方式进行初始化。如果它用于缩小一个内存块,该内存块尾部的部分内存便被拿掉,剩余部分内存的原先内容依然保留。
如果原先的内存块无法改变大小,realloc将分配另一块正确大小的内存,并把原来的那块内存的内容复制到新的块上。因此,在使用realloc之后,就不能再使用指向旧内存的指针,而是应该改用realloc所返回的新指针。
如果,如果realloc函数的第一个参数是NULL,那么它的行为就和malloc一模一样。
C和指针 第11章 动态内存分配 11.3 calloc和realloc
于 2022-06-25 19:53:26 首次发布