2009-05-14 5 views
2

Sans aucun changement à mon code, sauf bâtiment contre Qt 4.5 Je reçois le message d'avertissement suivant quand je lance mon application:Comment réparer mon application à partir d'une fuite lors de l'utilisation de Qt 4.5?

*** _NSAutoreleaseNoPool(): Object 0x50a1b0 of class NSCFNumber autoreleased with 
no pool in place - just leaking 

Je n'utilise pas tout Objective-C dans mon code, mais Qt 4.5 utilise un nouveau Back-end basé sur le cacao au lieu du carbone.

Je ne suis pas sûr comment adresser et corriger ce message d'erreur. Quelqu'un a une idée?

+0

J'ai découvert quelle était la cause du message d'erreur de fuite. J'ai eu un appel de programme Fantasktik installé et en cours d'exécution. Ce programme se connecte à tous les programmes en cours d'exécution. Je suppose que du code de Fantasktik était lancé avant que Qt ait installé le NSAutoreleasePool. – Scotts

Répondre

6

Généralement, lorsque vous voyez ce problème dans votre code, vous mettez entre parenthèses le bloc de code incriminé avec NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; avant et [pool release]; après. Vous pouvez définir un point d'arrêt sur la fonction _NSAutoreleaseNoPool et simplement rechercher l'analyse de la pile pour voir quel est le code incriminé. Gardez à l'esprit que -autorelease est utilisé partout dans Cocoa, donc ce n'est peut-être pas un appel spécifique à la libération automatique dans le code de Qt qui le déclenche.

Cependant, puisque c'est le code de Qt qui fait cela, et, enfin j'ai vérifié, Qt/Cocoa était encore un travail en cours, vous devriez probablement soumettre un rapport de bug avec l'erreur et une analyse de pile et attendez qu'ils le réparent.

+1

Je pensais que c'était «[vidange de la piscine]». –

Questions connexes