2009-11-22 9 views
0

J'ai remarqué que je recevais quelques erreurs à des points aléatoires dans mon application. J'ai eu 2 erreurs, "double free" et "checksum incorrect pour l'objet libéré". Heres la trace de pile d'une erreur "double libre". Quelqu'un peut-il fournir un aperçu? Cela se passe sur un appel dans mon code qui définit simplement un attribut à un NSNumber donc je ne peux pas comprendre pourquoi il le fait!Erreurs de données de base de Malloc

myObject.numberAttr = [NSNumber numberWithInt:[dateComponents day]]; 

Déclenchée Randomly (Ne pas toujours le cas):

#0 0x9585b072 in malloc_error_break 
#1 0x9585c218 in szone_error 
#2 0x9585c34d in free_tiny_botch 
#3 0x01c5e064 in _PFDeallocateObject 
#4 0x01c97e2b in -[NSManagedObject(_NSInternalMethods) _setLastSnapshot__:] 
#5 0x01c97a0d in -[NSManagedObjectContext(_NSInternalChangeProcessing) _establishEventSnapshotsForObject:] 
#6 0x01c97866 in _PFFastMOCObjectWillChange 
#7 0x01c976c5 in _PF_ManagedObject_WillChangeValueForKeyIndex 
#8 0x01c97525 in _sharedIMPL_setvfk_core 
#9 0x01c9b827 in _svfk_5 

Un grand merci,

Michael

Répondre

3

Je l'ai compris! Il s'avère que c'était un problème de threading avec mon contexte d'objet géré. Je le créais sur le fil principal et l'utilisais sur mon fil de fond. Cependant, il semblerait que le contexte doit être créé et utilisé dans un seul thread. J'espère que cela aidera tous ceux qui pourraient rencontrer ce problème car l'information de débogage n'était pas très claire!

+0

+1 pour la réponse, car cela m'a aidé à résoudre mon problème. Dans mon cas, NSManagedObject créé par le contexte principal a été utilisé sur un contexte d'arrière-plan qui est clairement faux. – nagan

1

Le "numberAttr" fonctionne comme une propriété déclarée comme conserver, Par conséquent, lorsque vous modifiez sa valeur pour référencer un objet NSNumber différent, l'objet NSNumber précédent reçoit un message de libération. Je m'attendrais à voir ce comportement si cet objet précédent avait déjà été libéré.

Avez-vous d'autres lieux que vous définissez "numberAttr"? Est-il possible qu'un de ces objets NSNumber ait été libéré avant de modifier l'attribut ici?

Questions connexes