realloc 的空间比原始空间小时,保存的数据会发生改变么?

realloc一个比malloc分配还小新的空间时,新的空间中数值还是原来的值么?下面先分配了100个int空间,初始化并realloc后缩小到20,那20个int空间保... realloc 一个比malloc 分配还小新的空间时,新的空间中数值还是原来的值么?

下面先分配了100 个int 空间,初始化并realloc 后缩小到20,那20 个int 空间保存的还是开始初始化的值么?
#include "stdlib.h"
#include "stdio.h"

main(){
int *p1;
int i;

p1 = (int *)malloc(100*sizeof(int));
for(i = 0; i < 100; ++i){
p1[i] = i;
}
printf("PT:%u\n",p1);
p1 = (int *)realloc(p1, 20*sizeof(int));

for(i = 0; i < 20; ++i){
printf("%d\t",p1[i]);
}

printf("\nPT:%u\n",p1);

free(p1);
}

答案是的,而且指针的位置也没有发生改变,
realloc 就有这个特性么?新分配的空间比原来的小时,指针就还是原始指针么?
展开
 我来答
123
推荐于2016-01-28 · 知道合伙人数码行家
123
知道合伙人数码行家
采纳数:12960 获赞数:94618
000000000000

向TA提问 私信TA
展开全部
指针名=(数据类型*)realloc(要改变内存大小的指针名,新的大小)。
新的大小一定要大于原来的大小,不然的话会导致数据丢失!

先判断当前的指针是否有足够的连续空间,如果有,扩大mem_address指向的地址,并且将mem_address返回,如果空间不够,先按照newsize指定的大小分配空间,将原有数据从头到尾拷贝到新分配的内存区域,而后释放原来mem_address所指内存区域(注意:原来指针是自动释放,不需要使用free),同时返回新分配的内存区域的首地址。即重新分配存储器块的地址。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
永盛毛纺厂
2015-06-14 · TA获得超过1016个赞
知道小有建树答主
回答量:1119
采纳率:14%
帮助的人:403万
展开全部
这个应该不会,空间变小,数据不会变化。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
天云老祖
2014-03-17 · TA获得超过729个赞
知道答主
回答量:100
采纳率:33%
帮助的人:20.3万
展开全部
指针有可能不是原来的地址
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式