malloc:***对象0x165060的错误:未释放指针被释放?
我有一个应用程序,其中我有一些video和音频和一些inapp purchase.all r伟大的模拟器和完美的工作。但昨天我已经创建了一个应用程序,并试图在它上面运行崩溃。错误报告是
malloc: *** error for object 0x165060: pointer being freed was not allocated *** set a breakpoint in malloc_error_break to debug
任何人都可以知道解决方案。我不知道哪里出错了,在模拟器中它工作得很好。任何人都可以帮助我吗?
您可能会释放一个对象太多次(例如,调用alloc一次并释放两次)。 要找出答案,请看一下这个问题中的技巧: 如何找到malloc“双重免费”错误的原因?
我个人喜欢NSZombieEnabled
方法。
另一个提示是,在释放它们之后将变量设置为nil。
例如: [bla release]; bla = nil;
[bla release]; bla = nil;
这确保你不会意外地释放它们两次,因为释放nil
什么都不做。
我跟着谈话者的建议
在我的情况下,我更换了以下行
[myMutualArray removeAllObjects];
同
[myMutualArray removeAllObjects]; myMutualArray = nil;
错误消失了!
没有看到任何代码,我们无法帮助您。 但是您可以自己找到问题,错误消息甚至告诉您该怎么做:在malloc_error_break
上设置断点,您通常会在堆栈跟踪中找到导致问题的代码。
仅仅因为它在模拟器中工作并不意味着您的代码是100%正确的。 一些错误只出现在真实设备上(反之亦然)。
请测试程序是否存在内存泄漏,还要检查自动释放以及是否正确释放对象。我们还需要检查释放的对象是否分配了内存。您还需要注意自动释放,因为我们可能会意外释放一个数组或字符串或任何已经自动释放的对象…
以下是一些可以找出确切问题的提示:
-
您可以通过分析项目来测试泄漏(单击shift + command + k)
-
使用仪器工具即运行泄漏
-
在Xcode中启用NSZombie,程序可以在这里找到
希望它有所帮助和有效!
这可能是由safari检查员引起的,您可以禁用它们。 有关详细信息,请参阅此post 。