iOS mauvais accès impossible à trouver
Je suis coincé avec un stupide mauvais accès depuis de nombreuses heures. Je suis totalement incapable de le trouver.
J'espère que certains d'entre vous seront en mesure de me montrer la réponse dans la lumière.
Dans le code du soufflet d'apparaître sur la ligne : NSString * stringCallVisit = [[NSString alloc]initWithFormat:.....
Je ne comprends pas, tous les objets sont locaux de la méthode à l'exception du paramètre theIntervention.
si je commente la méthode NSString * stringCallVisit = [[NSString alloc]initWithFormat:...
le mauvais accès n'apparaissent pas, même si je ne id obj = callVisit.injectionby;
au lieu de; je suppose Donc que le mauvais accès n'est pas de la callVisit objet, mais certainement de la stringCallVisit objet.
Mais pourquoi je suis juste instancier sur la dent où le mauvais accès apparaissent.
Merci pour votre aide,
-(NSString*)getCallVisitForIntervention:(Intervention*)theIntervention
{
NSManagedObjectContext *context = [iPad_TestAppDelegate mainContext];
NSError *error;
NSFetchRequest *requestCallVisit = [[NSFetchRequest alloc]init];
[requestCallVisit setEntity:[NSEntityDescription entityForName:@"CallVisit" inManagedObjectContext:context]];
NSPredicate *predicateInterventionID = [NSPredicate predicateWithFormat:@"intervention_id = %@",theIntervention.id];
[requestCallVisit setPredicate:predicateInterventionID];
NSMutableArray *callVisits = [[context executeFetchRequest:requestCallVisit error:&error]mutableCopy];
NSString *xml = @"<CallVisits>";
for(CallVisit *callVisit in callVisits)
{
NSString * stringCallVisit = [[NSString alloc]initWithFormat:
@"<CallVisit>"
"<id>%@</id>"
"<injectionby>%@</injectionby>"
"<injectionspot>%@</injectionspot>"
"<intervention_id>%@</intervention_id>"
"<fls>%d</fls>"
"<weight>%d</weight>"
"<height>%d</height>"
"<painAtInjection>%d</painAtInjection>"
"<created>%@</created>"
"<siteReaction>%d</siteReaction>"
"<technicalComplain>%d</technicalComplain>"
"<field1>%d</field1>"
"<field2>%d</field2>"
"<riskCompliance>%d</riskCompliance>"
"<reasonCompliance>%@</reasonCompliance>"
"<placebo>%@</placebo>"
"<needlereceived>%@</needlereceived>"
"<compliance>%d</compliance>"
"<psychologicalCondition>%d</psychologicalCondition>"
"<keepsegment>%d</keepsegment>"
"</CallVisit>",
callVisit.id,
callVisit.injectionby,
callVisit.injectionspot,
callVisit.intervention_id,
[callVisit.fls doubleValue],
[callVisit.weight doubleValue],
[callVisit.height doubleValue],
[callVisit.painAtInjection intValue],
callVisit.created,
[callVisit.siteReaction intValue],
[callVisit.technicalComplain intValue],
[callVisit.field1 intValue],
[callVisit.field2 intValue],
[callVisit.riskCompliance intValue],
callVisit.reasonCompliance,
callVisit.placebo,
callVisit.needlereceived,
[callVisit.compliance intValue],
[callVisit.psychologicalCondition intValue],
[callVisit.keepsegment intValue]];
xml = [xml stringByAppendingString:stringCallVisit];
[stringCallVisit release];
id obj = callVisit;
}
[callVisits release];
[requestCallVisit release];
xml = [xml stringByAppendingString:@"</CallVisits>"];
return xml;
}
EDIT:
J'ai fait ce que vous avez dit mais je'mm incapable de comprendre le journal et je n'ai pas reçu l'adresse de l'info malloc.
Je suis un peu perdu 🙂
MODIFIER
Voici le journal. Mais c'est étrange, mais l'application crash à un autre endroit.
GuardMalloc[iPad Test-7405]: Failed to VM allocate 397648 bytes
GuardMalloc[iPad Test-7405]: Explicitly trapping into debugger!!!
sharedlibrary apply-load-rules all
Error in re-setting breakpoint 1:
Catchpoint 2 (throw)iPad Test(7405,0xaccab2c0) malloc: recording malloc stacks to disk using standard recorder
GuardMalloc[iPad Test-7405]: *** mmap(size=2097152) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
GuardMalloc[iPad Test-7405]: *** mmap(size=2097152) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
No memory available to program: call to malloc failed
Error in re-setting breakpoint 1:
Error in re-setting breakpoint 1:
GuardMalloc[iPad Test-7405]: *** mmap(size=2097152) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
Current language: auto; currently objective-c
GuardMalloc[iPad Test-7405]: *** mmap(size=2097152) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
No memory available to program: call to malloc failed
GuardMalloc[iPad Test-7405]: *** mmap(size=2097152) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
No memory available to program: call to malloc failed
GuardMalloc[iPad Test-7405]: *** mmap(size=2097152) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
No memory available to program: call to malloc failed
(gdb)
Merci,je prends ce type de code que j'essaie de le déboguer. J'din pas compris cela. Je vais corriger cela 🙂
Wow incroyable, il semble que ce petit correctif à résoudre mon problème ! Merci beaucoup pour tes yeux 🙂
Je confirme, il suffit de remplacer %d par %.2f résoudre le problème ! Un grand merci à tous pour votre aide et votre temps ! Et spécialement magma pour les yeux 🙂
La version de Xcode utilisez-vous? Des versions plus récentes de LLVM marquera cela comme un avertissement, et de fournir des solutions rapides, l'insertion dans le format approprié.
OriginalL'auteur Amnysia | 2011-10-20
Vous devez vous connecter pour publier un commentaire.
Ensemble NSZombieEnabled, MallocStackLogging, et garde malloc dans le débogueur. Puis, lorsque votre Application se bloque, tapez ceci dans le gdb console:
Remplacer
0x543216
avec l'adresse de l'objet qui a causé le crash, et vous obtiendrez un beaucoup plus utile trace de la pile et il devrait vous aider à déterminer exactement la ligne de votre code qui est à l'origine du problème.Consultez cet article pour obtenir des instructions plus détaillées.
Edit: On dirait que vous pourriez être à court de mémoire. Avez-vous un
didReceiveMemoryWarning
méthode de mise en œuvre? Si oui, mettez un NSLog en elle pour savoir si vous êtes lowon mémoire.Il ressemble à cours de mémoire. Avez-vous un
didReceiveMemoryWarning
méthode de mise en œuvre?OriginalL'auteur chown
Êtes-vous à l'aide de XCode 3 ou 4? Si vous êtes à l'aide de 3, je recommande FORTEMENT la mise à niveau 4.
Si vous utilisez 4, appuyez sur CMD-I pour l'exécuter dans les Instruments, et sélectionnez l'option "Zombies" de profil. Ensuite, allez dans votre application d'exécution à l'écrasement point, et les Instruments de l'attraper. Vous recevrez un gris popup légende avec un lien, cliquez sur le lien qu'il vous faudra pour l'attribution de l'histoire. À l'extrême droite est le module appelant, où vous pouvez double-cliquer pour voir la ligne en surbrillance dans le code source où la mémoire a été allouée.
Mon soupçon est votre callVisits tableau, qui est retourné par une initialisation ou une copie de la méthode, vous ne devriez pas explicitement de presse à moins que vous êtes à l'aide d'init ou de le copier/mutableCopy méthodes, ou, sauf si vous explicitement conserver.
OriginalL'auteur Jay Imerman
Je suppose que l'un de vos callVisit composants n'est pas un objet, mais un scalaire (int, float, char, etc). Notez que TOUS les composants de callVisit nommé dans le format de déclaration doit être une référence d'objet valide, vu la façon dont c'est codé.
OriginalL'auteur Hot Licks
noter que le poids, la taille et fls sont le double des valeurs, et pourtant vous êtes à l'aide d'un %d (entier) de l'espace réservé pour eux. vous allez avoir de drôles de valeurs que xml. – magma 45 mins ago
Je confirme il suffit de remplacer %d par %.2f résoudre le problème ! Un grand merci à tous pour votre aide et votre temps ! Et spécialement magma pour les yeux 🙂 –
OriginalL'auteur Amnysia