2008-11-17 46 views
6

当在释放一个指针,你可能会看到一个错误,如iPhone - 调试“被释放的指针是未分配”的错误

“被释放的指针是未分配”

当与模拟器调试,我添加一个构建参数MallocStackLogging = YES - 这允许我在终端中使用malloc_history来追踪我在哪里释放了一个指针。

如果我调试设备上的这个版本的说法,我得到各种控制台的错误“无法创建堆栈日志文件”等

奇怪的是,我得到呈现在装置上的一些过度释放的指针错误,但不在模拟器上。

有没有人有任何使用设备本身跟踪这些经验的经验?

谢谢!

回答

1

我通常使用NSZombie这样的事情,检查this

0

您需要设定目标可执行MallocStackLogging ENV变量...

要访问这些设置,从组&选择您的可执行文件XCode中的文件窗格,然后获取信息。

转到参数选项卡,并添加以下条目到“变量在环境中设置”对话框:

9

另一种方式来做到这一点。确保打开NSZombie,以便报告获得额外版本的对象的内存地址。然后使用Performance Tool-> Object Allocations运行。这会带来乐器。查看由Xcode组织者提供的控制台日志。一旦你得到崩溃查找仪器中的内存地址。您将看到该对象上的所有malloc/frees历史记录,以及直接链接到您的代码中的链接。

+2

我是不能够与这些明确的方向(在Xcode 4.2.1)得到它 - 我有运行Xcode,然后在运行时附加Instruments。我为当前的Scheme打开了“启用僵尸对象”,一旦我触发了这个异常,乐器就像冠军一样锁定,并将我带到了僵尸地址的历史记录中。我查看了堆栈跟踪的初始分配情况,并看到导致异常的不必要的`[autorelease]`。真棒工具! – Dov 2011-12-09 01:11:53

0

请检查程序是否有内存泄漏,还请检查autoreleases以及是否正确释放对象。还需要检查释放的对象是否分配了内存。您还需要注意autorelease,因为不小心我们可能会释放一个数组或字符串或任何已经自动释放的对象......希望它能起作用!

提示:您可以通过分析你的项目来测试是否漏气(点击使用shift +指令+ K)

相关问题