代码之家  ›  专栏  ›  技术社区  ›  buley

这个mailto:openURL可能会导致malloc崩溃呢?

  •  0
  • buley  · 技术社区  · 15 年前

    我正在使用openURL发送一封带有一些链接的电子邮件。函数如下所示:

    //
    + (void) sendEmail:(NSString *) subject withBody:(NSString *)body {
     NSString *mailString = [NSString stringWithFormat:@"mailto:?@&subject=%@&body=%@",
           [subject stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding],
           [body  stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]];
     [[UIApplication sharedApplication] openURL:[NSURL URLWithString:mailString]];
     [mailString autorelease];
     }
    

    调用此函数的代码如下所示:

    [应用程序名称AppDelegatesendEmail:subjectLine withBody:正文];

    不管主题行和正文是什么,我都会得到这样一个错误:

    Program received signal:  “EXC_BAD_ACCESS”.
    

    电子邮件实际上会弹出,所以我知道它是通过那个openURL发送的。但到那时,我猜程序已经崩溃,所以当你退出电子邮件窗格时,它不会恢复。

    问题看起来像 this this forum post 但不幸的是,这个问题似乎从未得到解决。

    更新:删除自动释放的邮件字符串时(根据StackOverflow中的说明) ticket mentioned above

    //
    + (void) sendEmail:(NSString *) subject withBody:(NSString *)body {
     NSString *mailString = [NSString stringWithFormat:@"mailto:?@&subject=%@&body=%@",
           [subject stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding],
           [body  stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]];
     [[UIApplication sharedApplication] openURL:[NSURL URLWithString:mailString]];
     }
    

    设置malloc\u error\u break断点似乎没有任何作用。输出仍然如下所示:

    AppName(1424,0x3e9097c8) malloc: *** error for object 0x16fdf0: double free
    *** set a breakpoint in malloc_error_break to debug
    
    2 回复  |  直到 8 年前
        1
  •  3
  •   Vladimir    15 年前
    NSString *mailString = [NSString stringWithFormat:...
    

    已返回自动释放字符串-您不能向其发送任何自动释放消息

        2
  •  1
  •   Community Mohan Dere    8 年前

    使用NSZombieEnabled进行调试,如中所述 this answer .