马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
realloc 函数文档
函数概要:
1. realloc 函数修改 ptr 指向的内存空间大小为 size 字节。
2. 如果新分配的内存空间比原来的大,则旧内存块的数据不会发生改变;如果新的内存空间大小小于旧的内存空间,可能会导致数据丢失,慎用!
3. 该函数将移动内存空间的数据并返回新的指针。
4. 如果 ptr 参数为 NULL,那么调用该函数就相当于调用 malloc(size)。
5. 如果 size 参数为 0,并且 ptr 参数不为 NULL,那么调用该函数就相当于调用 free(ptr)。
6. 除非 ptr 参数为 NULL,否则 ptr 的值必须由先前调用 malloc、calloc 或 realloc 函数返回。
函数原型:
#include <stdlib.h>
...
void *realloc(void *ptr, size_t size);
参数解析:
参数 | 含义 | ptr | 1. 指向由先前调用 malloc、calloc 或 realloc 函数返回的内存空间
2. 如果该参数为 NULL,相当于调用 malloc(size) 函数 | size | 指定新的内存块空间大小,以字节为单位 |
返回值:
1. 如果函数调用成功,返回值是指向新的内存空间的指针,由于返回类型是 void 指针(void *),所以它可以被转换成任何类型的数据。
2. 如果函数调用失败,返回值是 NULL。
3. 如果 size 参数设置为 0,返回值也可能是 NULL,也可能返回一个指针值,稍后可以传递给 free 函数。
4. 如果 realloc 函数调用失败,那么原始内存空间的数据并不会修改,也不会被释放或移动。
演示:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i, num;
int count = 0;
int *ptr = NULL; // 注意,这里必须初始化为NULL
do
{
printf("请输入一个整数(输入-1表示结束):");
scanf("%d", &num);
count++;
ptr = (int *)realloc(ptr, count * sizeof(int));
if (ptr == NULL)
{
printf("内存空间不足!\n");
exit(1);
}
ptr[count-1] = num;
} while(num != -1);
printf("输入的整数分别是:");
for (i = 0; i < count; i++)
{
printf("%d ", ptr[i]);
}
printf("\n");
free(ptr);
return 0;
}
|