Iphone malloc:**对象0x165060的错误:未分配要释放的指针?
我有一个应用程序,其中我有一些视频和音频以及一些inapp购买。所有这些在模拟器中都很好,工作完美。但昨天我创建了一个应用程序,并试图在其上运行它从一开始就崩溃了。错误报告是Iphone malloc:**对象0x165060的错误:未分配要释放的指针?,iphone,ios,ipad,Iphone,Ios,Ipad,我有一个应用程序,其中我有一些视频和音频以及一些inapp购买。所有这些在模拟器中都很好,工作完美。但昨天我创建了一个应用程序,并试图在其上运行它从一开始就崩溃了。错误报告是 malloc: *** error for object 0x165060: pointer being freed was not allocated *** set a breakpoint in malloc_error_break to debug 有人知道解决方案吗?我不知道哪里出了问题,在模拟器中工作得很
malloc: *** error for object 0x165060: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
有人知道解决方案吗?我不知道哪里出了问题,在模拟器中工作得很好。有人能帮我吗?如果没有看到任何代码,我们就不能帮你。但是您可以自己找到问题,错误消息甚至会告诉您该怎么做:在
malloc\u error\u break
上设置断点,您通常会在堆栈跟踪中找到导致问题的代码
仅仅因为它在模拟器中工作并不意味着你的代码是100%正确的。有些bug只出现在真实的设备上(反之亦然) 您可能多次释放对象(例如,调用alloc一次,释放两次)。要了解其中的原因,请查看此问题中的技巧: 我个人喜欢
NSZombieEnabled
方法
另一个技巧是在释放变量后将其设置为零
例如:[bla release];bla=零代码>
这确保您不会意外地释放它们两次,因为释放nil
不起任何作用。请测试程序是否存在内存泄漏,还需要检查自动释放以及是否正确释放对象。我们还需要检查释放的对象是否已分配内存。您还需要注意自动释放,因为我们可能会意外释放数组、字符串或任何已自动释放的对象
以下是找出确切问题的一些技巧:
您可以通过分析项目来测试泄漏(单击shift+command+k)
使用仪器工具,即运行检查泄漏
在Xcode中启用NSZombie,可以找到过程
希望它能起到帮助和作用 我按照talkol的建议做了
在我的情况下,我替换了下面的行
[myMutualArray removeAllObjects]代码>
与
错误消失了 这可能是safari inspector造成的,您可以禁用它们。有关更多详细信息,请参阅此
当您试图对地址不在块开头的指针调用free时,我遇到了这种错误。例如:
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 int main()
5 {
6
7 int a; // some integers
8 int *pi; // a pointer to an integer
9 pi =(int*) malloc( 1*sizeof(int) );
10
11 a = 5;
12 pi = &a; // pi points to a
13 pi++; // pi is not anymore at start
14 free(pi);
15
16 printf("at the end, we are alived \n"); // this will not be printed
17
18 return 0;
19 }
1#包括
2#包括
3.
4 int main()
5 {
6.
7 int a;//一些整数
8 int*pi;//指向整数的指针
9π=(int*)malloc(1*sizeof(int));
10
11a=5;
12 pi=&a;//pi指向a
13π+++;//π在开始时不再是
14个自由(pi);
15
16 printf(“最后,我们被证实了”;//这不会被打印出来
17
18返回0;
19 }
你能想到昨天以来发生了什么变化吗?如果你做了一个干净的构建会发生什么?是的,我已经添加了provisionig文件和所有。并且创建了应用内购买。仍然在模拟器中显示没有错误。你能显示问题代码吗?您是否在应用程序中的任何位置使用free()?你的应用程序是使用ARC还是垃圾收集?我也遇到过同样的情况,我尝试在模拟器中重置内容和设置,而应用程序也在模拟器中进行了修改。。。我当时有内存泄漏问题。。所以只要检查一下相同的..你的设备和模拟器的操作系统版本是一样的吗?i dnt sd就是这样的。如果有这个问题,它也需要在模拟器中显示出来?这看起来像是一个内存相关的错误。由于内存在模拟器中的排列方式不同,因此它们的行为也会有所不同。实际上,这个问题可能也存在于模拟器中,它只是没有崩溃。。但是,仅仅是samein xode 3.2版本是不好的,那么就没有问题了。您的代码有问题。而且因为它不会一直出现,这是一个更糟糕的错误。
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 int main()
5 {
6
7 int a; // some integers
8 int *pi; // a pointer to an integer
9 pi =(int*) malloc( 1*sizeof(int) );
10
11 a = 5;
12 pi = &a; // pi points to a
13 pi++; // pi is not anymore at start
14 free(pi);
15
16 printf("at the end, we are alived \n"); // this will not be printed
17
18 return 0;
19 }