免费崩溃()

时间:2015-03-10 20:29:23

标签: ios c crash crt

我有一个来自iOS app的崩溃报告,这些报告来自于free()调用中的SIGABRT。

调用堆栈是一致的:

0   libsystem_kernel.dylib              0x3863c1f0 __pthread_kill + 8
1   libsystem_c.dylib                   0x385ecfdd abort + 77
2   libsystem_malloc.dylib              0x38664d67 free + 383

我试图获得更多诊断信息,但与此同时,是否有人遇到过相同的问题?什么样的错误参数会导致free()调用崩溃?我可以看到几个选项:

  • 空指针 (actually legit)
  • 数据区指针(即字符串文字)
  • 堆栈指针
  • 垃圾指针(即未初始化的)
  • 已释放的堆指针

有什么想法吗?这些是非常罕见的,最后一次是在九月 ' 14。但是我总共超过10个,那里可能有一个错误。

1 个答案:

答案 0 :(得分:2)

如果我正确读取堆栈转储,代码会在free中触发一个断言并调用abort。查看http://opensource.apple.com上libsystem_malloc的源代码,然后尝试确定哪个断言失败。

你有一个迷路指针,猜测它隐藏在一个不可重复的崩溃中几乎是不可能的。使用valgrind在模拟器中运行应用程序(如果可能的话)可以帮助您跟踪内存滥用情况。

堆栈转储比3行长,您应该指示哪个free调用导致了问题。它可以帮助您跟踪错误,但它也可能是一些早期指针滥用的后期副作用。