web-dev-qa-db-fra.com

malloc: erreur ***: somme de contrôle incorrecte pour l'objet libéré - l'objet a probablement été modifié après avoir été libéré

J'ai un gros problème avec mon application iOS: elle se bloque parfois sans erreur de débogage détaillée. La trace de la pile est vide. Ce sont les deux seules lignes de la trace de la pile:

  1. crash dans UIApplicationMain à "talon de symbole pour: - [_ UIHostedTextServiceSession renvoiTextServiceAnimated:]".
  2. et signaler "libsystem_c.dylib`malloc_error_break".

dans com.Apple.main-thread.

L'erreur sur le débogueur Xcode (avec le périphérique connecté):

malloc: *** error for object 0x208a7614: incorrect checksum for freed object - object was probably modified after being freed.
*** set a breakpoint in malloc_error_break to debug

J'ai défini un point d'arrêt dans malloc_error_break avec libsystem_c.dylib sans aucun retour du débogueur. Je n'ai aucune idée pour résoudre ce problème.

36
user2776543

Pour trouver la source du problème, dans Xcode, accédez à Produit> Schéma> Modifier le schéma, puis sous l'onglet Diagnostics, activez tous les paramètres Malloc et Guard Malloc.

Avec cela, exécutez à nouveau votre application et Xcode s’arrêtera sur la ligne à l’origine du problème.

Scheme definition

41
Pedro Soares

Puisque vous êtes dans le débogueur, vous devriez regarder l’emplacement mémoire 0x208a7614 et voir ce qui est là. Les données en mémoire peuvent être utiles pour déterminer ce qui ne va pas.

Ce qui se passe est l'un des suivants:

  1. vous libérez un objet deux fois,

  2. vous libérez un pointeur qui n'a jamais été attribué

  3. vous écrivez via un pointeur invalide qui indiquait précédemment un objet déjà libéré

Comme la trace de la pile est vide, il peut être utile d’ajouter des instructions de journal de débogage à votre code à différents endroits pour voir si vous pouvez préciser où se situe le problème dans le code. L'utilisation des outils de mémoire dans Instruments peut également aider. Vous pouvez essayer d’activer NSZombies, mais cela ressemble à un problème d’allocation C et non pas à un problème Objective-C.

De plus, y a-t-il autre chose d'écrit sur la console avant le crash? Si tel est le cas, cela peut vous indiquer d'où vient le problème.

25
user1118321

salut les gars, j'ai trouvé cette solution si vous utilisez l'interface nib ou xib et que vous rencontrez ce problème lorsque vous voulez pousser un objet viewcontroller, puis quelque temps cette erreur se produira et que votre application se plantera (spécialement une erreur dans l'iPad) Voici le Solution:

// Format comme ça

UINavigationController *nav=[[UINavigationController      alloc]initWithRootViewController:yourViewControllerObj];

[self.navigationController  presentViewController:nav animated:true completion:nil];

N'essayez pas de pousser dans cette condition.

2
Ravi Raja Jangid

Si vous avez ce problème. allez à: produit-> schéma-> diagnostic-> puis activez mollic gaurd Edge et objet zombie puis fermez puis allez produit-> arrêtez à nouveau product-build et exécutez. bonne chance

0
MK Islam