中易网

c语言,使用realloc为什么函数改变了原来内存中的数据……

答案:3  悬赏:40  
解决时间 2021-01-12 10:30
c语言,使用realloc为什么函数改变了原来内存中的数据……
最佳答案
正常情况应当不变,但是:
(1)realloc重新分配内存大小时有可能搬动存储块的地址,如果你到老地址去查数值,有可能变了,要用变量名字去查数值。
(2)realloc重新分配内存大小时,如果是减少存储单元(realloc既可用来增加单元,也可以用来减少单元),那么减去的那部分的 数据可能没了。
(3) realloc重新分配内存大小时,应检查分配成功了还是失败了。
int count;
int* numbers = NULL;
int* more_numbers = NULL;
....
// count 一次一次变化,重新分配
more_numbers = (int*) realloc (numbers, count * sizeof(int));
if (more_numbers!=NULL) // 应检查分配成功了还是失败了
{
numbers=more_numbers;
}
else { // 失败了
free (numbers);
puts ("Error (re)allocating memory");
exit(0);
}
失败了,就难说了。
全部回答

代码都没???,,,不过操作正确应该是不变的。。。#include
#include
int main()
{
int i;
int *pn=(int *)malloc(5*sizeof(int));
printf("%p ",pn);
for(i=0;i<5;i++)
scanf("%d",&pn[i]);
pn=(int *)realloc(pn,10*sizeof(int));
printf("%p ",pn);
for(i=0;i<5;i++)
printf("%3d",pn[i]);
printf(" ");
free(pn);
return 0;
}
正常情况应当不变,但是:
(1)realloc重新分配内存大小时有可能搬动存储块的地址,如果你到老地址去查数值,有可能变了,要用变量名字去查数值。
(2)realloc重新分配内存大小时,如果是减少存储单元(realloc既可用来增加单元,也可以用来减少单元),那么减去的那部分的 数据可能没了。
(3) realloc重新分配内存大小时,应检查分配成功了还是失败了。
int count;
int* numbers = NULL;
int* more_numbers = NULL;
....
// count 一次一次变化,重新分配
more_numbers = (int*) realloc (numbers, count * sizeof(int));
if (more_numbers!=NULL) // 应检查分配成功了还是失败了
{
numbers=more_numbers;
}
else { // 失败了
free (numbers);
puts ("Error (re)allocating memory");
exit(0);
}
失败了,就难说了。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
my和goodbye读音是否相同
职工五小创新到底是啥内容?
哈尔滨至白城最快多少千米
合江农商银行24小时自助银行(张家沟住宅小区
敢问在座的各位这女孩是谁,抢答开始。
男生的服装搭配中,所谓头重脚轻指的是什么
七八个星天外两三点雨山前旧时手法是什么
在淘宝助理里面选带有重量的运费模板为什么不
微微彩妆怎么去啊,我要去那办事
女孩说我就是这么能闹腾的大宝宝我怎么回复
脱分化和再分化分别需要什么激素
天津阔佬皮衣超市里的海狸毛男士皮衣多少钱
大学化学cr ce cre都是什么意思,学酸碱平衡
1/144×96分之35=多少
雅马哈长笛481与481h哪个好
推荐资讯
中国紫砂文化研究会寿光分会这个地址在什么地
南北通透的房子屋门的开启方向
2015年错版人民币价格
中国的电影主要弘扬的是什么样的价值观
台湾母子门
人民币八零版的那个十元钱,多少钱。
一场钢琴演奏会的票价有48.8元和88.8元两种,
求受一直暗恋攻然后嫁给他,然后任劳任怨特别
JAVA 中的同步机制有什么作用?
关于在四千字左右的我的春节征文
从韦曲南到西甘村怎么坐公交车,最快需要多久
遂宁向山村公租房在什么地方
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?