这个mailto怎么样:openURL可能导致这个malloc崩溃?

时间:2010-08-22 16:17:53

标签: iphone objective-c memory-management

我正在使用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];
 }

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

[AppNameAppDelegate sendEmail:subjectLine withBody:bodyText];

无论subjectLine和bodyText是什么,我都会收到这样的错误:

Program received signal:  “EXC_BAD_ACCESS”.

电子邮件实际上弹出,所以我知道它正在通过openURL。但到那时我想程序已崩溃,因此当你退出电子邮件窗格时它没有恢复。

关于为什么会发生这种情况的任何想法?

问题看起来像this,但该答案不适用。它看起来更像this forum post,但不幸的是,这个问题看起来从未解决过。

更新:删除自动释放的mailString时(根据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_error_break断点似乎没有做任何事情。输出仍然如下:

AppName(1424,0x3e9097c8) malloc: *** error for object 0x16fdf0: double free
*** set a breakpoint in malloc_error_break to debug

2 个答案:

答案 0 :(得分:3)

NSString *mailString = [NSString stringWithFormat:...

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

答案 1 :(得分:1)

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