Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: ScottsОтветов: 1

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

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

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

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

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

objective-ccocoaqt

Ответы

Ответ 1 · рейтинг 6 · Boaz Stuller

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы