|
函数原型:
#include <stdlib.h>
void *calloc(void *existing_memory, size_t new_size); 说明:
此函数可以对分配了的内存空间进行大小的调整。
existing_memory 参数是一个指针,指向之前由 malloc(), calloc(), realloc() 调用分配的一些内存;
new_size 参数指明要调整的大小,根据需求,可大可小调整。
注意:为了完成工作,realloc() 函数可能需要对数据进行移动(原先的数据顺序可能发生了变化),所以调用此函数对内存重新分配后,就一定要用新的指针,绝不要再用 realloc 调用之前设置的指针去访问内存。
另外值得注意的是,realloc() 在不能对内存块长度做出调整时会返回空指针。所以,以下的代码是要应该避免的:my_ptr = malloc(BLOCK_SIZE);
.....
my_ptr = realloc(my_ptr, BLOCK_SIZE * 10) 上面的代码中,如果 realloc() 函数执行失败了,它返回一个空指针,即 my_ptr 指向 null,而原先通过 malloc() 分配的内存无法再通过 my_ptr 去访问。
建议:
从用户的利益考虑,在释放老内存之前最好先用 malloc() 申请一块新内存,再用 memcpy() 函数把老内存里面的数据拷贝到新的内存快里。这样,即使出现错误,应用程序还能访问到保存在原来那块内存里的数据,这样可以让程序退出得干净利索。 |
|