7

当过度释放指针时,您可能会看到错误,例如

“未分配被释放的指针”

在使用模拟器进行调试时,我添加了一个构建参数 MallocStackLogging = YES - 这允许我在终端中使用 malloc_history 来追踪我过度释放指针的位置。

如果我使用此构建参数在设备上进行调试,我会收到各种控制台错误“无法创建堆栈日志文件”等。

奇怪的是,我在设备上出现了一些过度释放的指针错误,但在模拟器上却没有。

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

谢谢!

4

4 回答 4

9

另一种方法来做到这一点。确保打开 NSZombie,以便它报告正在获得额外释放的对象的内存地址。然后使用性能工具-> 对象分配运行。这将带来乐器。查看 Xcode 管理器提供的控制台日志。一旦你得到崩溃查找仪器中的内存地址。您将看到该对象上 malloc/frees 的全部历史,以及直接进入您的代码的链接。

于 2009-12-15T20:47:01.943 回答
1

我通常使用 NSZombie 来做这些事情,看看这个

于 2008-11-17T19:07:27.087 回答
0

您需要在目标可执行文件上设置 MallocStackLogging 环境变量...

要访问这些设置,请从 XCode 的 Groups & Files 窗格中选择您的可执行文件,然后选择 Get Info。

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

于 2009-06-11T23:04:49.883 回答
0

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

提示:您可以通过分析您的项目来测试泄漏(单击 shift+command+k)

于 2012-01-25T07:54:21.087 回答