参考:

http://www.cplusplus.com/reference/cstdlib/realloc/

https://www.geeksforgeeks.org/how-to-deallocate-memory-without-using-free-in-c/

 

函数原型: 

void *realloc(void *ptr,size_t size);

如果 ptr = NULL,就相当于调用 malloc(size) 

如果 ptr != NULL && size = 0,就相当于调用 free(ptr),ptr 指向的对象会被释放。

 

例子:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 int main(void)
 5 {
 6     int count,input;
 7     int *numbers,*morenumbers;
 8     count = 0;
 9     numbers = morenumbers = NULL;
10 
11     do{
12         printf("Enter an integer(0 to quit): ");
13         scanf("%d",&input);
14         count++;
15         morenumbers = (int *)realloc(numbers,count * sizeof(int));// *.*
16         if(morenumbers == NULL)
17         {
18             puts("(re)alloc failed.");
19             exit(EXIT_FAILURE);
20         }
21         numbers = morenumbers;
22         numbers[count - 1] = input;    
23     }while(input != 0);
24     puts("Number entered:");
25     for(int i = 0; i < count - 1; ++i) // get rid of 0
26         printf("%d ",numbers[i]);
27     free(numbers);
28 
29     return 0;
30 }

结果:

Enter an integer(0 to quit): 1
Enter an integer(0 to quit): 2
Enter an integer(0 to quit): 3
Enter an integer(0 to quit): 4
Enter an integer(0 to quit): 5
Enter an integer(0 to quit): 6
Enter an integer(0 to quit): 7
Enter an integer(0 to quit): 8
Enter an integer(0 to quit): 9
Enter an integer(0 to quit): 0
1 2 3 4 5 6 7 8 9