我有一个来自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个,那里可能有一个错误。
答案 0 :(得分:2)
如果我正确读取堆栈转储,代码会在free
中触发一个断言并调用abort
。查看http://opensource.apple.com上libsystem_malloc的源代码,然后尝试确定哪个断言失败。
你有一个迷路指针,猜测它隐藏在一个不可重复的崩溃中几乎是不可能的。使用valgrind在模拟器中运行应用程序(如果可能的话)可以帮助您跟踪内存滥用情况。
堆栈转储比3行长,您应该指示哪个free
调用导致了问题。它可以帮助您跟踪错误,但它也可能是一些早期指针滥用的后期副作用。