Как исправить утечку моего приложения при использовании Qt 4.5?

Без каких-либо изменений в моем коде, кроме сборки с Qt 4.5, я получаю следующее предупреждающее сообщение при запуске своего приложения:

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

Я не использую Objective-C в своем коде, но Qt 4.5 использует новую серверную часть на основе Cocoa вместо Carbon.

Я не уверен, как решить и исправить это сообщение об ошибке. Кто-нибудь знает?


person Scotts    schedule 14.05.2009    source источник
comment
Я узнал, что было причиной сообщения об ошибке утечки. У меня была установлена ​​и запущена программа Fantasktik. Эта программа подключается ко всем запущенным программам. Я предполагаю, что какой-то код из Fantasktik запускался до того, как Qt настроил NSAutoreleasePool.   -  person Scotts    schedule 18.08.2009


Ответы (1)


Как правило, когда вы видите эту проблему в своем коде, вы заключаете в скобки блок кода, вызывающий нарушение, с помощью NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; до и [pool release]; после. Вы можете установить точку останова для функции _NSAutoreleaseNoPool и просто просмотреть сканирование стека, чтобы увидеть, что такое код нарушения. Имейте в виду, что -autorelease используется везде в Cocoa, поэтому это может быть не конкретный вызов autorelease в коде Qt, который запускает его.

Однако, поскольку это делает код Qt, и, в последний раз, когда я проверял, Qt/Cocoa все еще находился в стадии разработки, вам, вероятно, следует просто отправить им отчет об ошибке с сообщением об ошибке и обходом стека и дождаться их исправить.

person Boaz Stuller    schedule 14.05.2009
comment
Я думал, что это [pool drain]. - person Raffi Khatchadourian; 24.03.2012