realloc()
能够对一个现在的内存块大小进行重新分配,同时不会丢失原先内存块的内容。
#include <stdio.h>
#include <stdlib.h>
void add_element(char c);
int current_element = 0;
int total_elemet = 2;
char *dynamic;
int main()
{
dynamic = malloc(total_elemet);
add_element('a');
add_element('a');
add_element('a');
add_element('a');
add_element('a');
printf("%d\n", total_elemet);
}
void add_element(char c)
{
if (current_element == total_elemet - 1)
{
total_elemet *= 2;
dynamic = realloc(dynamic, total_elemet);
if (dynamic == NULL) perror("Coundn't expand the table");
}
current_element++;
dynamic[current_element] = c;
}
在实践中,不要把
realloc()
函数的返回值直接赋给字符指针。如果realloc()
函数失败,它会使该指针的值变为NULL
,这样就无法对现有的表进行访问。——《C专家编程》P236