中易网

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

答案:3  悬赏:40  
解决时间 2021-01-12 10:30
  • 提问者网友:ミ烙印ゝ
  • 2021-01-11 22:16
c语言,使用realloc为什么函数改变了原来内存中的数据……
最佳答案
  • 二级知识专家网友:胯下狙击手
  • 2021-01-11 22:57
正常情况应当不变,但是:
(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);
}
失败了,就难说了。
全部回答
  • 1楼网友:神的生死簿
  • 2021-01-12 00:25

代码都没???,,,不过操作正确应该是不变的。。。#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;
}
  • 2楼网友:孤独入客枕
  • 2021-01-11 23:40
正常情况应当不变,但是:
(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);
}
失败了,就难说了。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息