未分配对象指针的 iOS Objec-C 错误
Posted
技术标签:
【中文标题】未分配对象指针的 iOS Objec-C 错误【英文标题】:iOS Objec-C error for object pointer being freed was not allocated 【发布时间】:2011-07-07 13:22:12 【问题描述】:我在 xcode 中收到以下错误。
对象 0x4e18d00 的错误:未分配被释放的指针 ** 在 malloc_error_break 中设置断点以进行调试
我已经在目标中设置了 NSZombieEnabled,所以我可以查看调用。这是
-[___NSArrayI 发布]
看起来我已经在我的代码中的其他地方释放了一些数组,然后自动释放池在它已经被释放时也试图释放它。
我怎样才能知道在哪里?有什么想法吗?
仅供参考,我正在使用arrayWithCapacity
方法或类似方法创建所有数组,切勿使用alloc
或init
方法。我没有看到我在哪里发布这些相同的数组。 (也许我是瞎子!!)
另外,控制流程如下:我点击UIButton
,触发附加到onclick的函数。这将进入各个逻辑层,然后返回NSArray
。然后我可以在“onClick 按钮函数”中迭代这个数组并打印内容。
当此“onClick 按钮功能”退出时,我在“main”方法中收到上述错误。
另一个注意事项是,在一个函数中,我创建了一个 NSMutableArray,但想要返回一个 NSArray
,所以我使用了 [[mutableArray copy] autorelease]
。这样可以吧?
任何建议都将不胜感激,因为我经常很难找到错误的原因。
提前致谢。
【问题讨论】:
你有没有按照它的建议在malloc_error_break
上设置一个断点,然后在调试器中运行代码?
我正要更新我的问题,并询问如何在 xcode 4 中解决这个问题。我之前尝试过但无法弄清楚.. 有没有这方面的教程?
对不起,我只知道在 Xcode 3 中怎么做。
断点选项卡,底部+号,添加符号断点,在符号中输入malloc_error_break然后点击完成。
我已经添加了断点(就像我之前尝试过的那样),但仍然没有。在那一点上它甚至似乎都没有破裂。
【参考方案1】:
我知道出了什么问题..
在书籍类中,我将章节声明为 NSAray,在默认构造函数中我说
chapters = [NSArray array];
我把它从构造函数中取出来了,一切都很好。 谢谢你们的帮助。
附:如果我忘记了有人可以将此标记为已接受的答案吗?干杯;)
【讨论】:
【参考方案2】:当您的应用崩溃时,您可以看到您的应用在哪一行崩溃,您还可以看到在崩溃发生之前调用的函数序列。我认为这条线导致崩溃 [[mutableArray copy] autorelease]。因为你没有保留它。复制返回一个自动释放的对象。您可以在文档中看到函数返回的内容。在objective-c中通常返回一个自动释放的对象。
【讨论】:
这是不正确的,这里是来自 NSCopying 协议的文档,记住发件人是你。 “返回的对象由负责释放它的发送者隐式保留。如果“不可变与可变”的考虑适用于接收对象,则返回的副本是不可变的;否则副本的确切性质由类确定。” 记住 NARC(new、alloc、retain、copy/mutableCopy)返回一个拥有的对象。 好的,我找到了问题所在。我有一个包含章节的书籍对象..(章节对象的 NSArray)我将 mutableArray 放入 book.chapters。评论那条线解决了我的问题。我尝试使用 [mutableArray copy] 将章节放在那里,但它仍然崩溃。有任何想法吗?谢谢。以上是关于未分配对象指针的 iOS Objec-C 错误的主要内容,如果未能解决你的问题,请参考以下文章