2010-08-22 2 views
0

J'utilise openURL pour envoyer un email avec quelques liens. La fonction ressemble à ceci:Qu'en est-il de ce mailto: openURL peut être à l'origine de ce crash de malloc?

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

Le code qui appelle cette fonction ressemble à ceci:

[AppNameAppDelegate sendEmail: subjectline withBody: bodyText];

Peu importe ce que le subjectline et bodyText, je reçois une erreur comme ceci:

Program received signal: “EXC_BAD_ACCESS”. 

L'email pops réellement, alors je sais que ça en fait par cette openURL. Mais d'ici là, je suppose que le programme a planté et donc il n'est pas restauré lorsque vous quittez le volet e-mail.

Des idées sur pourquoi cela se passe-t-il?

question ressemble à this mais cette réponse est non applicable. Il ressemble plus à this forum post mais malheureusement ce problème semble qu'il n'a jamais été résolu. MISE À JOUR: Lors de la suppression de la chaîne mailSaut automatique (conformément aux instructions du StackOverflow ticket mentioned above), la situation ne s'améliore pas.

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

La définition d'un point d'arrêt malloc_error_break ne semble pas faire quoi que ce soit. La sortie ressemble encore ceci:

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

Répondre

3
NSString *mailString = [NSString stringWithFormat:... 

retourne déjà chaîne autoreleased - vous ne devez pas envoyé des messages autorelease à ce

+0

Merci pour votre réponse. Malheureusement, j'avais essayé cela et cela ne semble pas résoudre mon problème. Pls voir la question mise à jour pour la sortie. – buley

+1

Quel système ciblez-vous? J'ai fait un échantillon - le code sans autorelease supplémentaire semble fonctionner correctement sur iPhoneOS 3.1 ... Peut-être essayer de nettoyer et de reconstruire votre projet? Ou votre vrai problème peut ne pas être dans cette fonction mais ailleurs. – Vladimir

+0

Je cible la version 4.0. Malheureusement, je suppose que le problème est plus profond que je ne peux espérer trouver une réponse. – buley

1

Utilisez NSZombieEnabled pour déboguer comme je l'ai décrit dans this answer.

+0

Merci pour la suggestion. Va travailler sur ça. Mais enlever ce code supprime l'erreur, en me suggérant que je peux parier que la cause est quelque part dans ces quelques lignes de code. Va vérifier en utilisant cette technique. – buley

+0

Trouvé mon zombie. Des conseils sur la façon dont je vois ce que cette allocation de mémoire représente? 2010-08-22 09: 34: 58.165 AppName [1448: 307] *** - [CFString release]: message envoyé à l'instance libérée 0x19a0f0 – buley

+1

@editor: Cela signifie que vous libérez une chaîne quelque part. Vérifiez pour vous assurer que vous ne faites pas la même erreur ailleurs. – jtbandes

Questions connexes