gpt4 book ai didi

objective-c - 分配已分配的内存

转载 作者:行者123 更新时间:2023-11-30 18:15:38 25 4
gpt4 key购买 nike

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

欢迎任何帮助:)

谢谢!

最佳答案

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

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

尝试使用 valgrind 调试您的程序(如果这是一个选项),或者如果不尝试隔离内存损坏可疑代码并使用 valgrind 进行调试,则您一定在某个地方存在一个错误,该错误会覆盖某些地方基本数据结构。

进入堆

为了解释这个奇怪的错误消息,这里有一些有趣的 ASCII 艺术

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

    FFFFFFFF

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

我们得到类似的东西

AMBBBMFF

如果我们现在在内存中写入

AMBBBMFF
^
here

我们破坏了堆的数据结构,并且由于 A 或 B 的校验和错误,因此它会发出错误消息。

关于objective-c - 分配已分配的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15877306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com