头文件:#include <stdlib.h>
realloc() 函数用来重新分配内存空间,其原型为:
void* realloc (void* ptr, size_t size);
【参数说明】ptr 为需要重新分配的内存空间指针,size 为新的内存空间的大小。
realloc() 对 ptr 指向的内存重新分配 size 大小的空间,size 可比原来的大或者小,还可以不变(如果你无聊的话)。当 malloc()、calloc() 分配的内存空间不够用时,就可以用 realloc() 来调整已分配的内存。
如果 ptr 为 NULL,它的效果和 malloc() 相同,即分配 size 字节的内存空间。
如果 size 的值为 0,那么 ptr 指向的内存空间就会被释放,但是由于没有开辟新的内存空间,所以会返回空指针;类似于调用 free()。
几点注意:
【返回值】分配成功返回新的内存地址,可能与 ptr 相同,也可能不同;失败则返回 NULL。
注意:如果分配失败,ptr 指向的内存不会被释放,它的内容也不会改变,依然可以正常使用。
代码示例:
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int input,n;
int count = 0;
int* numbers = NULL;
int* more_numbers = NULL;
do {
printf ("Enter an integer value (0 to end): ");
scanf ("%d", &input);
count++;
more_numbers = (int*) realloc (numbers, count * sizeof(int));
if (more_numbers!=NULL) {
numbers=more_numbers;
numbers[count-1]=input;
}else {
free (numbers);
puts ("Error (re)allocating memory");
exit (1);
}
} while(input!=0);
printf ("Numbers entered: ");
for (n=0;n<count;n++) printf("%d ",numbers[n]);
free (numbers);
system("pause");
return 0;
}
运行结果:
上面的代码提示用户输入若干个数字(输入 0 结束)。每次输入新的数字,numbers 指向的内存空间就会增长 sizeof(int) 的长度。