永发信息网

C语言realloc函数经常不能理解的出错

答案:1  悬赏:80  手机版
解决时间 2021-02-19 05:28
如下代码
#include
#include
int main()
{
int n = 0, temporary = 0;
int *a, *b;
int i;
while(1)
{
scanf("%d",&temporary);
if(!temporary)
break;
if(!n)
a = (int *)malloc(sizeof(int));
else
{
b = a;
a = (int *)realloc(b, sizeof(int));
}
a[n] = temporary;
n ++;
}
for(i = 0; i < n; i ++)
printf("%d ",a[i]);
free(a);
a = NULL;
free(b);
b = NULL;
system("pause>nul");
return 0;
}

然后1\n2\n3\n0\n这样输入后,有时候正常,有时候就会提示*.exe已经停止工作 出错,但是输出没问题
其他程序片段测试的时候没有遇到这个问题。。。也测试了应该是没有出现realloc返回NULL的情况 求指教问题在哪?一样的输入有时候出错有时候不出错。。。

按照楼下说的,先去掉了free的部分结果还是有时候有错
比如我的电脑上输入这一串数据
31个整数 再写个0 就出错
最佳答案
要确定 a、b 指向不同的内存的时候再分别释放内存
否则你就对同一块内存释放两次 对于已经释放的内存下达释放内存命令 当然出错啦
realloc有时是另寻内存块 有时是在原有内存块上直接扩展 因此有了你的问题

另:
C语言 realloc() 函数位于 stdlib.h 头文件中,其原型为:
void *realloc(void *ptr, size_t size);
realloc() 会将 ptr 所指向的内存块的大小修改为 size,并将新的内存指针返回。

在你的代码里a、b始终指向同样大小的内存块 相必也并不是你的初衷
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
在电台、电视台里用人家的作品不付酬,算侵权
听到一声响声后,爆米花就做好了的英文
广东佛山骏陶瓷临朐总代理这个地址在什么地方
太阳是太阳系的中心天体,地球是太阳系的八颗
阳光宝贝托管中心我想知道这个在什么地方
国庆节期间,各商场纷纷开展让利促销活动,百
小漠傻缺碉堡锦集片尾mv是什么歌
辐射4MOD怎么用 辐射4MOD放在哪个文件夹
请问ps怎么把15张照片拼成3X5的宫格大图?
为什么我真心对待每一个人,却得到的是别人的
电脑大神,t500散热好还是t400散热好?我打算
GCASSINO地址在哪,我要去那里办事
数据库中,mod(58,7)
只有一层的粉饼,粉扑可以直接放粉饼上面吗
苏州蠡口家具这个地址在什么地方,我要处理点
推荐资讯
HIs father died ten years after he married
水煎包加水加油的时间
路由器后面一闪一闪的灯是什么
旺角小吃这个地址在什么地方,我要处理点事
黑夜漫漫是哪首圣歌的歌词
【细胞膜是单层膜还是双层膜】细胞膜是怎样的
三星盖乐世a9为什么收不到短信
怎样判断电容在电路中好坏
除了弹钢琴其他的我什么都不会。用英语怎么说
2.4X8分之3十10分之1
【包公断案歇后语是什么】包公断案——歇后语
巩留县地方海事局在什么地方啊,我要过去处理
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?