web-dev-qa-db-fra.com

malloc: erreur *** pour l'objet 0x165060: le pointeur en cours de libération n'a pas été attribué?

J'ai une application dans laquelle j'ai des vidéos, des audios et des achats inapp.Tout excellent en simulateur et qui fonctionne parfaitement.Mais hier j'ai créé une application et j'essaie de l'exécuter.

malloc: *** error for object 0x165060: pointer being freed was not allocated
  *** set a breakpoint in malloc_error_break to debug

quelqu'un peut-il connaître la solution. Je ne sais pas où cela ne va pas et dans le simulateur, il fonctionne parfaitement. Quelqu'un peut-il m'aider?

10
hacker

Vous relâchez probablement un objet trop de fois (par exemple, appelez alloc une fois et relâchez deux fois). Pour savoir où, jetez un coup d'oeil aux techniques de cette question: Comment trouver la cause d'une erreur "double free" de malloc?

Personnellement, j'aime bien la méthode NSZombieEnabled.

Une autre astuce consiste à définir vos variables sur nil après les avoir publiées.

Par exemple: [bla release]; bla = nil; 

Cela garantit que vous ne les relâcherez pas deux fois par inadvertance, car la libération de nil ne fait rien.

4
talkol

J'ai suivi comme suggéré talkol 

Dans mon cas, j'ai remplacé la ligne suivante

[myMutualArray removeAllObjects];

avec

[myMutualArray removeAllObjects]; myMutualArray = nil;

Et l'erreur disparue!

3
Avin

Veuillez tester le programme pour détecter les fuites de mémoire, vérifier également les autoreleases et vérifier si vous relâchez les objets correctement ou non. Nous devons également vérifier si un objet libéré dispose d'une mémoire allouée ou non. Vous devez également faire attention à la libération automatique, car libérer un tableau ou une chaîne ou tout objet qui est déjà autoreleased ...

Voici quelques astuces pour identifier le problème exact:  

  1. Vous pouvez tester les fuites en analysant votre projet (cliquez sur les touches Maj + Commande + k). 

  2. Utiliser l'outil d'instruments, c'est-à-dire courir pour des fuites

  3. Activer NSZombie dans Xcode, la procédure peut être trouvée ici

J'espère que ça aide et fonctionne!

0
Eshwar Chaitanya

Sans voir aucun code, nous ne pouvons pas vous aider avec ceci. Mais vous pouvez trouver le problème vous-même, le message d'erreur vous indique même quoi faire: définissez un point d'arrêt sur malloc_error_break et vous trouverez généralement le code à l'origine du problème dans la trace de la pile. 

Ce n'est pas parce que cela fonctionne dans le simulateur que votre code est correct à 100%. certains bogues n'apparaissent que sur un périphérique réel (ou inversement). 

0
Sven

Cela peut être causé par Safari Inspector, vous pouvez les désactiver. Reportez-vous à cepostpour plus de détails.

 enter image description here

0
Kris Roofe