我正在测试EXE_BAD_ACCESS错误。我已将NSZombieEnabled,MallocStackLogging,MallocStackLoggingNoCompact设置为YES。现在在调试器中,当我从调试模式运行我的应用程序时,我收到此消息,我可以看到:
iota(3586) malloc: recording malloc stacks to disk using standard recorder
iota(3586) malloc: stack logs being written into /private/var/mobile/Applications/8E21A85B-369E-4487-962B-1550E56602DC/tmp/stack-logs.3586.iota.index
iota(3586) malloc: Please issue: cp /private/var/mobile/Applications/8E21A85B-369E-4487-962B-1550E56602DC/tmp/stack-logs.3586.iota.suRQjy.link /tmp/
当我即将遇到错误时,
2011-02-14 14:29:44.350 iota[3586:307] *** -[CFString autorelease]: message sent to deallocated instance 0x81eab70
最后,当我在调试器中给出命令以查看堆栈跟踪
时(gdb)shell malloc_history 3586 0x81eab70
我得到了
malloc_history cannot examine process 3586 because the process does not exist.
任何人都可以告诉我我做错了什么,在错误发生之前,我设置了
set env MallocStackLogging 1 in the debugger too
先谢谢
答案 0 :(得分:0)
看起来你正在发布一个你不拥有的NSString。如果从其中一个类方法中获取一个字符串,它们将作为自动释放的对象传递,所以除非你保留它,否则你不应该释放它。
如需完整的探索,请查看Memory Management Programming Guidelines。
答案 1 :(得分:0)
在您使用内存时,内存可能会保持分配状态,或在测试期间被释放但同时仍然有效,但在设备上运行时更有可能被释放并显示为错误的访问错误。
跟踪这些事情的最佳方式,无论如何都是一个好主意(即使没有明显的问题)是在“工具”工具中运行应用程序,尤其是使用“泄漏”选项。