发布网友 发布时间:2022-05-26 20:11
共3个回答
热心网友 时间:2023-10-25 03:11
这个错误信息:double free or corruption (!prev),free了多次或者数据损坏。
看了你的代码没有看到明显的多次释放,但是没有看到你输出结果的部分,我想可能是在那部分访问内存越界了。
有时即使越界一个字节也会被检查到而报这个警告。可以仔细检查一下输出部分的代码,或者用先注释掉输出部分,跑一跑以缩小范围这种方法。
while (counter != height - 1)
//此处赋值越界,估计是修改到了动态内存的信息区,造成释放时候取到不正确的信息从而造成崩溃;
假设tom之后的内存就是matrix[0],matrix[1];
tom越界破坏了matrix[N]的一个或者几个记录内存信息的内存,从而造成后果。
参考资料
CSDN.CSDN[引用时间2018-1-8]
热心网友 时间:2023-10-25 03:12
这个错误信息:double free or corruption (!prev),free了多次或者数据损坏热心网友 时间:2023-10-25 03:12
你仔细看看你程序中动态分配内存这一句是否有问题:追答看你的程序 你是想把 x作为一个数组吧。
然而请你注意,double *x 这个指针虽然可以指向一个数组,但是它实际上只能作为该数组的第一个元素的地址被调用,也就是说,无论你调用这句命令 x = MALLOC(N1, double);给 x 分配多大的内存,他都只能是存储第一个元素的数据,而不能存储多个元素的数据。而 x 之所以可以作为一个数组的地址指针是因为编译器给数组分配的是几段地址连续的内存空间,你知道了第一个元素的地址
只要相应的将地址变量加1既可以得到第二个元素的地址并访问到第二个元素,同理依次加1就可以得到第三,第四,第五,......第n个元素的地址。
所以,你的程序实际上只分配了存放第一个元素的内存空间只是这块空间很大而已,而其他元素根本没有分配到内存。这就是你的问题所在。