iOS libsystem_c.dylib strdup内存泄漏NSZombie无法正常工作

Win*_*ton 8 memory-leaks objective-c instruments nszombie ios

请帮我跟踪iOS内存泄漏.谢谢!

我正在使用xCode 4.0.1,我尝试激活NSZombie来跟踪内存泄漏,但它似乎不像以前一样工作,使用xCode 3.x

我无法找到内存泄漏的来源,因为Instruments指出了这一点:

泄露的对象 - > GeneralBlock-32 地址 - > 0x4c8600 大小 - > 32字节 负责的库 - > libsystem_c.dylib 负责的框架/调用者 - > strup

此时我不知道如果我正在使用带有NSZombie的Instruments与xCode 4正确的方式,因为当我点击"i"获取更多信息时,它没有显示NSZombie选项,在左侧选项Leaks下.

观察:我的iPhone应用程序播放实时流mms/wma以及wma udioudio文件的时间有限.只有有限的wma文件才会发生泄漏,但是当我从流式源播放时没有结束时间,它会完美运行.

bbu*_*bum 10

首先,这是一个malloc块,而不是一个对象.僵尸不会工作(也不会在以前的版本中工作).

泄漏发生了多少次?一旦?别担心.每个流一次?提交一个错误 - 到目前为止你的代码中没有这个错误(除非你的代码正在调用strdup,这肯定是可能的,但在大多数没有大量使用第三方库的iOS应用程序中都不典型......你是?)

在任何情况下,除非它在您的应用程序的运行时间内泄漏100s和100s的32字节分配,不要担心它(但请提交错误).

正如Valkio所说,你可以直接从gdb(或从Instruments)获取分配的堆栈跟踪.


vak*_*kio 5

如果这样做,您可以看到它的分配位置:

  1. 转到产品 - >编辑方案 - >运行(调试) - >参数.
  2. 将其添加到环境变量:MallocStackLoggingNoCompact
  3. 将其设置为YES
  4. 运行,让它崩溃.
  5. 键入控制台(gdb)info malloc 0x4c8600或任何地址.

  • 您也可以在仪器中执行此操作.不需要gdb; 点击Instruments中的分配地址,它将显示分配堆栈跟踪. (2认同)