Iphone malloc:**对象0x165060的错误:未分配要释放的指针?

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 有人知道解决方案吗?我不知道哪里出了问题,在模拟器中工作得很

我有一个应用程序,其中我有一些视频和音频以及一些inapp购买。所有这些在模拟器中都很好,工作完美。但昨天我创建了一个应用程序,并试图在其上运行它从一开始就崩溃了。错误报告是

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 }