iOS mauvais access impossible à find

Je suis coincé avec un mauvais access stupide depuis tant d'heures. Je suis totalement incapable de le find. J'espère que certains d'entre vous seront en mesure de me montrer la réponse à la lumière. Dans le code ci-dessous, il apparaît sur la ligne: NSSsortingng * ssortingngCallVisit = [[NSSsortingng alloc]initWithFormat:..... Je ne comprends pas, tous les objects sont locaux de la méthode sauf le paramètre l'Intervention.

si je commente la méthode NSSsortingng * ssortingngCallVisit = [[NSSsortingng alloc]initWithFormat:... les mauvais access n'apparaissent pas même si je fais id obj = callVisit.injectionby; au lieu de; Donc je suppose que le mauvais access ne provient pas de l'object callVisit mais certainement de l'object ssortingngCallVisit. Mais pourquoi je suis juste l'instancier sur le moment où le mauvais access apparaît.

Merci de votre aide,

 -(NSSsortingng*)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]; NSSsortingng *xml = @"<CallVisits>"; for(CallVisit *callVisit in callVisits) { NSSsortingng * ssortingngCallVisit = [[NSSsortingng 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 ssortingngByAppendingSsortingng:ssortingngCallVisit]; [ssortingngCallVisit release]; id obj = callVisit; } [callVisits release]; [requestCallVisit release]; xml = [xml ssortingngByAppendingSsortingng:@"</CallVisits>"]; return xml; } 

MODIFIER:

J'ai fait ce que vous avez dit mais je suis incapable de comprendre le journal et je n'ai pas reçu d'adresse à l'info malloc. Je suis un peu perdu 🙂

EDIT Voici le journal. Mais c'est étrange mais connaissez le crash de l'application à 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) 

Définissez NSZombieEnabled , MallocStackLogging et guard malloc dans le débogueur. Ensuite, lorsque votre application se bloque, tapez ceci dans la console gdb:

 (gdb) info malloc-history 0x543216 

Remplacez 0x543216 par l'adresse de l'object qui a causé le plantage, et vous obtiendrez une trace de stack beaucoup plus utile et cela devrait vous aider à identifier la ligne exacte dans votre code qui cause le problème.

Voir cet article pour des instructions plus détaillées.


Edit: Il semble que vous manquiez de memory. Avez-vous une méthode didReceiveMemoryWarning implémentée? Si oui, mettez un NSLog dedans pour savoir si vous avez peu de memory.

Utilisez-vous XCode 3 ou 4? Si vous utilisez 3, je recommand fortement la mise à niveau vers 4.

Si vous utilisez 4, appuyez sur CMD-I pour l'exécuter dans Instruments et select le profil "Zombies". Passez ensuite l'exécution de votre application au sharepoint collision, et Instruments l'attrapera. Vous obtiendrez une légende popup grise avec un lien, click le lien qui vous mènera à l'historique d'allocation. À l'extrême droite se trouve le module appelant, où vous pouvez double-cliquer pour voir la ligne en surbrillance dans le code source où la memory a été allouée.

Mon soupçon est votre tableau callVisits, qui n'est pas returnné par une méthode init ou copy – vous ne devriez pas publier explicitement sauf si vous utilisez des methods init ou copy / mutableCopy, ou à less que vous ne les conserviez explicitement.

Je suppose que l'un de vos composants callVisit n'est pas un object, mais un scalaire (int, float, char, etc). Notez que CHAQUE composant de callVisit nommé dans l'instruction de format doit être une reference d'object valide, étant donné la manière dont il est codé.

Notez que weight, height et fls sont des valeurs doubles, et pourtant vous utilisez un espace réservé% d (entier) pour eux. vous allez get des valeurs amusantes dans ce xml. – magma Il y a 45 mn

Je confirme Remplacer juste% d par% .2f résoudre le problème! Un grand merci à tous pour votre aide et votre time! Et spécialement magma pour ses yeux 🙂 –