我有一个来自iOS应用的崩溃报告,这些崩溃报告源于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)
有什么想法吗?那些是非常罕见的,最后一个是在9月
'14。但是我总共有10多个,那里可能有一个错误。
最佳答案
如果我正确读取了堆栈转储,则代码会触发free
的断言,并称为abort
。查看http://opensource.apple.com上libsystem_malloc的源代码,然后尝试确定哪个断言失败。
您有一个流浪指针,猜测它在单个不可复制的崩溃中隐藏的位置几乎是不可能的。使用valgrind在模拟器中运行您的应用程序(如果可能)可能有助于您跟踪内存滥用情况。
如果堆栈转储的时间长于3行,则应指出哪个对free
的调用引起了问题。它可以帮助您跟踪该错误,但也可能是某些较早的指针误用的较晚的副作用。