gpt4 book ai didi

objective-c - 访问有效的、未释放的对象时发生 EXC_BAD_ACCESS 错误

转载 作者:行者123 更新时间:2023-11-29 05:00:48 25 4
gpt4 key购买 nike

我在释放对象时遇到了一个奇怪的问题。在对象的dealloc方法中,我释放了另一个(子)对象。当这个子对象被释放时,我收到 EXC_BAD_ACCESS 错误。在我调用release之前,我非常确定子对象是一个有效的指针。

这就是我确认奇怪之处的方式 - 我在 dealloc 方法内设置了一个断点,就在子对象释放之前,并且它被分配了!我可以向它发送消息,它会正确响应。另一个奇怪的错误是,如果 NSZombieEnabled 设置为 YES,我根本不会收到错误,甚至 NSZombie 的常见错误(即我已向已释放对象发送消息)代码也不会正常运行。

有人知道如何解决这个问题吗?

提前致谢!

<小时/>

* 编辑 1 *

我发现如果我将 [super dealloc] 放在 dealloc 的末尾,它会崩溃,但如果我将它放在开始处,它就不会崩溃。我以前也遇到过类似的情况,只是方式不同 - 如果我在 dealloc 开始时使用 [super dealloc],应用程序就会崩溃,但在结束时却没有。

为什么它会产生影响以及什么时候应该使用什么?

<小时/>

* 编辑 2 *

从头开始编辑#1!无论哪种方式都不起作用。

最佳答案

你的dealloc例程碰巧是这样的:

- (void)dealloc
{
[super dealloc];
[otherObject release];
}

如果是这样,请更改顺序。如果您调用[super dealloc],您的对象将从内存中消失,稍后尝试访问其他对象将导致您访问未分配的内存 -> EXC_BAD_ACCESS。

关于objective-c - 访问有效的、未释放的对象时发生 EXC_BAD_ACCESS 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7025390/

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