吾爱程序员:这里有好玩的游戏和软件
当前位置:首页C语言教程 → 使用 realloc()

使用 realloc()

来源:网络 | 更新时间:2022-01-23 18:27:32
可以使用 realloc() 更改动态分配的内存大小。 根据 C99 标准:
void *realloc(void *ptr, size_t size);
realloc 释放 ptr 指向的旧对象并返回一个指向具有 size 指定大小的新对象的指针。新对象的内容与释放前旧对象的内容相同,直至新旧大小中的较小者。新对象中超出旧对象大小的任何字节都具有不确定的值。 需要注意的一点是realloc() 应该只用于动态分配的内存。如果内存不是动态分配的,那么行为是未定义的。 例如,程序 1 演示了 realloc() 的不正确使用,程序 2 演示了 realloc() 的正确使用。 方案一:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int arr[2], i;
int *ptr = arr;
int *ptr_new;

arr[0] = 10; 
arr[1] = 20; 

// incorrect use of new_ptr: undefined behaviour
ptr_new = (int *)realloc(ptr, sizeof(int)*3);
*(ptr_new + 2) = 30;

for(i = 0; i < 3; i++)
printf("%d ", *(ptr_new + i));

getchar();
return 0;
}
输出: 未定义的行为 方案二:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *ptr = (int *)malloc(sizeof(int)*2);
int i;
int *ptr_new;

*ptr = 10; 
*(ptr + 1) = 20;

ptr_new = (int *)realloc(ptr, sizeof(int)*3);
*(ptr_new + 2) = 30;
for(i = 0; i < 3; i++)
printf("%d ", *(ptr_new + i));

getchar();
return 0;
}
输出: 10 20 30  

最新文章

热点资讯

手游排行榜

CopyRight 2020-2030吾爱程序员

鄂ICP备2021004581号-8

本站资源收集于网络,如有侵权请联系我们:35492删除0109@qq.com