首先释放,然后重新分配
C语言实现都为使用人员提供了3个内存分配函数:malloc、realloc和free。malloc(n)将返回一个指针,指向一块新分配的可以容纳n个字符的内存,编程人员可以使用这块内存。free将释放malloc分配的内存,方式是通过把malloc函数返回的指针作为参数传递给free函数。realloc需要把指向一块内存已分配内存的区域指针以及这块内存新的大小作为参数传入,就可以调整(扩大或缩小)这块内存区域为新的大小,这个过程中有可能涉及内存的复制。
内存重分配(reallocation)
这一实现允许某内存块被释放之后重新分配其大小,前提是内存重分配(reallocation)操作执行得必须足够早。(UNIX)
例如,下面的代码就是合法的:
free(p);
p = realloc(p, newsize);
释放一个链表中的所有元素:
for (p = head; p != NULL; p = p->next) {
free((char *)p)
}
这里,我们不必担心调用free之后,会使p->next变得无效。当然,这种技巧不值得推荐。(有可能在其它系统上失败)
/*
** 各系统都能正常释放内存。
*/
for( p = head; p; p = tmp ){
tmp = p->next;
free( p );
}