我在尝试运行我正在开发的iOS应用程序时遇到以下错误:
appname(6097,0x3e835d98) malloc: *** error for object 0x20104600: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug如何找出是哪个对free()的调用生成了此错误?如果我为malloc_error_break添加一个断点,我得到的整个堆栈跟踪都是对"malloc_error_break“的调用,如下所示:
libsystem_c.dylib`malloc_error_break:
0x32f20fa8: push {r7, lr} < Thread 1: breakpoint 1.1
0x32f20faa: mov r7, sp
0x32f20fac: nop
0x32f20fae: nop
0x32f20fb0: pop {r7, pc}
0x32f20fb2: nop 如果我不为malloc_error_break添加断点,我会得到一个同样无用的堆栈跟踪,但这次只有一条__pthread_kill和一条汇编指令。
还有什么我可以做的,以更好地了解生成此错误的代码?
发布于 2012-06-11 03:38:48
我刚刚用下面的main方法创建了一个名为"Test“的新项目:
void* data = malloc(100);
free(data);
free(data);然后打开“产品->编辑方案”,单击"Test.app“选项卡,然后单击"Diagnostics”。然后我选择"Enable Guard Malloc“。
现在,如果我运行应用程序,我会在第二个free上获得一个中断。
https://stackoverflow.com/questions/10971179
复制相似问题