已分配内存的分配

时间:2013-04-08 10:53:29

标签: objective-c c memory allocation

我正在开发一个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尝试分配已经使用过的内存?

欢迎任何帮助:)

谢谢!

3 个答案:

答案 0 :(得分:0)

  malloc: *** error for object 0x6505a4: incorrect checksum for freed object - object was probably modified after being freed

是一条消息,告诉我你在某处破坏了堆的数据结构(缓冲区溢出,下溢,其他一些奇怪的魔法)。

尝试使用valgrind调试程序(如果这是一个选项)或者如果不尝试隔离内存中断可疑代码并使用valgrind调试它,则必须在某处覆盖某些基本数据结构的错误。

进入堆

这里解释这个奇怪的错误信息是一些有趣的ASCII艺术

  • F:空闲块/字节
  • M:内存管理结构

    FFFFFFFF

现在应用程序分配了两次内存(A和B)

我们得到像

这样的东西
AMBBBMFF

如果我们现在写在内存中

AMBBBMFF
 ^
here

我们会破坏堆的数据结构,因此A或B的校验和是错误的,所以它会发出错误消息。

答案 1 :(得分:0)

谢谢大家,我发现了我的问题:

其中一种算法要求具有特殊的大小并且没有测试它(它不是我自己的代码),所以它从数组中输出。

答案 2 :(得分:-2)

如果你的程序制作了大量的malloc,它可以重新限制专用于你的程序的内存。当你不再需要时,你可能会释​​放记忆。尝试增加程序内存限制。