1

尝试运行我正在开发的 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和一个汇编指令。

我还能做些什么来更好地了解生成此错误的代码吗?

4

1 回答 1

1

我刚刚使用以下main方法创建了一个名为“Test”的新项目:

void* data = malloc(100);    
free(data);
free(data);

然后我打开“Product->Edit Scheme”,单击“Test.app”选项卡,然后单击“Diagnostics”。然后我选择“启用 Guard Malloc”。

现在,如果我运行应用程序,我会在第二个free.

于 2012-06-10T19:38:47.593 回答