2013-04-08 93 views
0

我正在开发一个Objective-C(iOS)应用程序,它在应用程序的基于C的部分中使用非常大的数组(大小> 10000)。已分配内存的分配

在执行的时刻,使一个小结构我提出的一个malloc,我有消息:

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

由消息给出的ADRESS已被使用由阵列我在此之前使用的电话:

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

iOS不会尝试分配使用中的内存。代码中会有一个导致此错误的错误。你可以创建一个最小的测试用例并编辑你的问题来包含该代码吗? – simonc 2013-04-08 10:55:17

+0

你如何创建你的数组? – 2013-04-08 11:05:42

+0

斯蒂芬说什么;我敢打赌一美元,你超越了数组的末尾。 – bbum 2013-04-08 14:45:59

回答

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

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

尝试用valgrind调试程序(如果这是一个选项),或者如果不尝试与隔离Valgrind的内存curruption可疑代码并调试它,你必须有地方会覆盖任何地方一些esential数据结构的错误。

到堆中

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

  • F:免费块/字节
  • L:内存管理结构

    FFFFFFFF

现在的应用程序分配一些内存的两倍(A和B)

我们得到类似

AMBBBMFF 

,如果我们能在这里写在内存

AMBBBMFF 
^ 
here 

我们currupt的的数据结构堆,并且因为A或B的校验和是错误的,所以它发出错误消息。

-2

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

+3

这不回答问题... – 2013-04-08 11:02:18

0

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

一个算法要求有一个特殊的尺寸,并没有测试它(这不是我自己的代码),所以它所著拉出阵列。