web-dev-qa-db-fra.com

Xcode - Mon application plante et le message d'erreur est "Le pointeur non valide est retiré de la liste de diffusion libre *** et définit un point d'arrêt dans malloc_error_break pour le débogage"

Mon application fonctionne parfaitement sur simulateur . Mais lorsque je l'exécute sur l'appareil, l'application se bloque et affiche une erreur:

"malloc: * erreur pour l'objet 0x17415d0c0: le pointeur non valide a été mis en file d'attente dans la liste libre * a défini un point d'arrêt dans malloc_error_break pour déboguer";

J'ai cherché et défini un point d'arrêt dans malloc_error_break pour déboguer, mais je ne trouve toujours pas le problème. J'ai essayé de changer le schéma du projet, activé Zombie Object, mais ne trouve pas la réponse.

J'essaie aussi d'utiliser un instrument, mais je ne suis pas bon pour ça.

13
Nijat2018

J'ai corrigé cette erreur avec Xcode 8 sous iOS 8.3 . Je viens de modifier la cible de déploiement de 8.3 à 8.0 . Si l'erreur apparaît maintenant après la migration vers Xcode 8 et que votre appareil fonctionne sous contrôle iOS 8 peut être une décision temporaire.

UPD: Xcode 8.1 beta est corrigé cette erreur.

13
Andy Sander

Je viens de résoudre ce problème avec Xcode 8. La préparation d'une version compatible avec iOS10, mise à jour selon la recommandation de Swift Migration 2.3, fonctionne parfaitement sur iOS9 et iOS10, mais se bloque sur iOS8.4. J'ai annulé les modifications apportées au code et à Main.storyboard et construit le même contenu sur iOS8 avec Xcode 7.3 corrigé mes problèmes. 

2
Dani.Rangelov

J'ai aussi rencontré cette étrange erreur, je la recherche sur Google et les gens disent que c'est le bogue de Swift, elle n'a pas été corrigée ... Je débogue ligne par ligne pour trouver la solution.

La raison pour laquelle cette erreur apparaît

Dans EditRecordVC j'ai une fonction de type générique func update<RO>(operation: RO) where RO : RealmOperation, RO.R == EditRecordVC.R

Dans sa sous-classe ConflictedRecordEditVC, je remplace la fonction, je saisis update et Xcode m'aide à terminer la fonction entière override func update<RO>(record: Record?, operation: RO?) where RO : RealmOperation, RO.R == Record, à bien compiler.

Exécutez le code, une fois la fonction remplacée exécutée, cette erreur apparaîtra, le Xcode s’arrêtera sur une ligne aléatoire, personne ne peut savoir qu’elle est causée par cette fonction.

Je débogue ligne par ligne, découvre que je dois changer le type générique à override func update<RO>(operation: RO) where RO : RealmOperation, RO.R == Record, tout fonctionnera bien à nouveau.

J'oublie quand j'ai ajouté le? par erreur et Xcode n'est pas en colère.

Alors vérifiez votre type de fonction générique et assurez-vous qu'il est exactement la même chose avec la classe super

0
ygweric