我正在开发一个Objective-C(iOS)应用程序,该应用程序在应用程序的基于C的部分中使用非常大的数组(大小> 10 000)。
在执行的那一刻,我制作了一个我做的小结构的malloc,我有消息:
malloc: *** error for object 0x6505a4: incorrect checksum for freed object - object was probably modified after being freed
消息给出的地址已经被我在此调用之前使用的数组占用:
write in address : 0x6505a0 - im_x[12] // im_x is my array
write in address : 0x6505a8 - im_x[13] // im_x is my array
为什么iOS尝试分配已经使用过的内存?
欢迎任何帮助:)
谢谢!
答案 0 :(得分:0)
malloc: *** error for object 0x6505a4: incorrect checksum for freed object - object was probably modified after being freed
是一条消息,告诉我你在某处破坏了堆的数据结构(缓冲区溢出,下溢,其他一些奇怪的魔法)。
尝试使用valgrind
调试程序(如果这是一个选项)或者如果不尝试隔离内存中断可疑代码并使用valgrind调试它,则必须在某处覆盖某些基本数据结构的错误。
进入堆
这里解释这个奇怪的错误信息是一些有趣的ASCII艺术
M:内存管理结构
FFFFFFFF
现在应用程序分配了两次内存(A和B)
我们得到像
这样的东西AMBBBMFF
如果我们现在写在内存中
AMBBBMFF
^
here
我们会破坏堆的数据结构,因此A或B的校验和是错误的,所以它会发出错误消息。
答案 1 :(得分:0)
谢谢大家,我发现了我的问题:
其中一种算法要求具有特殊的大小并且没有测试它(它不是我自己的代码),所以它从数组中输出。
答案 2 :(得分:-2)
如果你的程序制作了大量的malloc,它可以重新限制专用于你的程序的内存。当你不再需要时,你可能会释放记忆。尝试增加程序内存限制。