永发信息网

C语言,realloc动态内存申请,出现报错double free or corruption (!prev)

答案:3  悬赏:0  手机版
解决时间 2021-11-21 16:38
C语言,realloc动态内存申请,出现报错double free or corruption (!prev)
最佳答案
这个错误信息:double free or corruption (!prev),free了多次或者数据损坏。
看了你的代码没有看到明显的多次释放,但是没有看到你输出结果的部分,我想可能是在那部分访问内存越界了。
有时即使越界一个字节也会被检查到而报这个警告。可以仔细检查一下输出部分的代码,或者用先注释掉输出部分,跑一跑以缩小范围这种方法。
while (counter != height - 1)
//此处赋值越界,估计是修改到了动态内存的信息区,造成释放时候取到不正确的信息从而造成崩溃;
假设tom之后的内存就是matrix[0],matrix[1];
tom越界破坏了matrix[N]的一个或者几个记录内存信息的内存,从而造成后果。
参考资料
CSDN.CSDN[引用时间2018-1-8]
全部回答
你仔细看看你程序中动态分配内存这一句是否有问题:
x = MALLOC(N1, double);
PS:指针!追问程序的一开始,有如下定义:

#define MALLOC(num,type) (type*)alloc((num)*sizeof(type))
看着没问题啊追答看你的程序 你是想把 x作为一个数组吧。
然而请你注意,double *x 这个指针虽然可以指向一个数组,但是它实际上只能作为该数组的第一个元素的地址被调用,也就是说,无论你调用这句命令 x = MALLOC(N1, double);给 x 分配多大的内存,他都只能是存储第一个元素的数据,而不能存储多个元素的数据。而 x 之所以可以作为一个数组的地址指针是因为编译器给数组分配的是几段地址连续的内存空间,你知道了第一个元素的地址
只要相应的将地址变量加1既可以得到第二个元素的地址并访问到第二个元素,同理依次加1就可以得到第三,第四,第五,......第n个元素的地址。
所以,你的程序实际上只分配了存放第一个元素的内存空间只是这块空间很大而已,而其他元素根本没有分配到内存。这就是你的问题所在。
这个错误信息:double free or corruption (!prev),free了多次或者数据损坏

看了你的代码没有看到明显的多次释放,但是没有看到你输出结果的部分,我想可能是在那部分访问内存越界了。

有时即使越界一个字节也会被检查到而报这个警告。可以仔细检查一下输出部分的代码,或者用先注释掉输出部分,跑一跑以缩小范围这种方法。追问你好,注释掉输出后,直接报错 Segmentation fault (core dumped) 加入输出后的程序 见补充问题,求帮助、、、追答count ++;
fprintf(fout, "%12.4f%12.4f\n", x[count], y[count]);
问题就在这种地方了,在count++后你才输出,这样在末端妥妥的会越界了
而且你这样根本就是错开了一个单位,数组偏移0的位置就没输出过。

fprintf(fout, "%12.4f%12.4f\n", x[count], y[count]);
count ++;
这样就不会越界追问我又看了一下 我的原程序,就是先fprintf(fout, "%12.4f%12.4f\n", x[count], y[count]);
才count++; 上面写错了、、、不好意思啊、、还可能是哪里出错呢?追答371行,fclose(fout2);这里多余了
因为你在323行已经关闭过一次了
删掉371行就一切ok
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
光耦在开关电源上的作用
得力3919点钞机 现实错误e10 e62 怎么调整
想买一本司马迁的史记 但不知道哪个版本的好
芭蕉树的繁殖方法
形容道德品质的词语
长沙w115几分钟一趟
“客户”的英语缩写是什么?
东北小伙子是怎么娶到山东姑娘的
王淑芬的介绍
全柴4d26发动机早上不好启动是什么原因
单赛季场均篮板前十名,什么水平
用过德国柏琳的产品可以说下,好用吗?
刚问的问没有回答
叉叉助手冒险岛M脚本怎么刷分脚本刷分图文攻
斯诺克中的英式球杆和美式球杆有什么区别?
推荐资讯
坐月子可以护肤吗
多多洗衣吧(东环一路)地址好找么,我有些事要
叙述重金属的慨念,重金属检查为什么以铅为代
MFC 怎么获得主线程的 CWinThread 指针
微波介质陶瓷中q*f值中18000@2.6ghz什么意思
东菱面包机和面停了,再按和面程序为什么不转
look at genie and daniel.怎么读
莫干山160别墅酒店地址在哪,我要去那里办事
她是个小女孩才17岁
谁能给出一个标准的高层建筑的悬浮层一般是多
喉咙好像总是有东西是怎么回事
如何理解学会放手行为
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?