Ios 使用Xcode调试free()
我在尝试运行正在开发的iOS应用程序时遇到以下错误:Ios 使用Xcode调试free(),ios,xcode,debugging,memory-management,Ios,Xcode,Debugging,Memory Management,我在尝试运行正在开发的iOS应用程序时遇到以下错误: appname(6097,0x3e835d98)malloc:**对象0x20104600的错误:未分配要释放的指针 ***在malloc\u error\u break中设置断点以进行调试 如何找出是哪个调用free()生成了此错误?如果我为malloc\u error\u break添加断点,我得到的整个堆栈跟踪是对“malloc\u error\u break”的调用,如下所示: libsystem\u c.dylib`malloc\
appname(6097,0x3e835d98)malloc:**对象0x20104600的错误:未分配要释放的指针
***在malloc\u error\u break中设置断点以进行调试
如何找出是哪个调用free()
生成了此错误?如果我为malloc\u error\u break
添加断点,我得到的整个堆栈跟踪是对“malloc\u error\u break
”的调用,如下所示:
libsystem\u c.dylib`malloc\u error\u break:
0x32f20fa8:push{r7,lr}<线程1:断点1.1
0x32f20faa:mov r7,sp
0x32f20fac:nop
0x32f20fae:nop
0x32f20fb0:pop{r7,pc}
0x32f20fb2:nop
如果我没有为malloc\u error\u break
添加断点,我会得到一个类似的无用堆栈跟踪,但这次只有一个\u pthread\u kill
和一条汇编指令
我还能做些什么来更好地了解产生此错误的代码吗?我刚刚用以下
main
方法创建了一个名为“Test”的新项目:
void* data = malloc(100);
free(data);
free(data);
然后我打开“产品->编辑方案”,单击“Test.app”选项卡并单击“诊断”。然后我选择“启用保护Malloc”
现在,如果我运行该应用程序,我会在第二个
free
上休息一下。我刚刚用以下main
方法创建了一个名为“Test”的新项目:
void* data = malloc(100);
free(data);
free(data);
然后我打开“产品->编辑方案”,单击“Test.app”选项卡并单击“诊断”。然后我选择“启用保护Malloc”
现在,如果我运行应用程序,我会在第二个
free
的时候休息一下。你试过用仪器进行内存分析吗?使用malloc()和free()的应用程序是什么?“你不是在用Objective-C吗?”苏尔坦,我确实试过仪器,但在那里我也找不到任何有用的东西。但也许我找的地方不对。。。使用工具调试内存分配时,我看到的只是-分配,与此错误无关。我认为信息应该出现在内存分配中的某个位置,但我也找不到。您是否尝试使用工具进行内存分析?使用malloc()和free()的应用程序是什么?“你不是在用Objective-C吗?”苏尔坦,我确实试过仪器,但在那里我也找不到任何有用的东西。但也许我找的地方不对。。。在使用仪器调试内存分配时,我看到的只是-分配,与此错误无关。我认为信息应该出现在内存分配中的某个位置,但我也找不到。显然,您不能在设备上使用Guard Malloc。我会在模拟器里试试。显然,你不能在设备上使用Guard Malloc。我会在模拟器里试试。