Отказ exc_bad_access в приложении QT - PullRequest
0 голосов
/ 13 октября 2011

Я пишу приложение для QT, и я очень хорошо разбираюсь в C ++, так что я думаю, в этом проблема. У меня сбой с сигналом exc_bad_access на моем Mac, что означает, что я делаю что-то не так с памятью. Вот мой код:

void MainWindowController::showMainWindow() {
    MainWindow *w = mainWindow();
    w ->show();
}

MainWindow *MainWindowController::mainWindow() {
    if (NULL != _mainWindow)
        return _mainWindow;

    // otherwise, we need to load it and return it

    _mainWindow = new MainWindow(0);
    return _mainWindow;
}

_mainWindow - это переменная экземпляра, указатель (как вы могли догадаться из сигнатуры функции). Это простая ленивая загрузка. Я думаю Я делаю управление памятью ОК, так как этот класс владеет объектом (который позже удаляется в деструкторе).

Сбой происходит в строке w -> show();, QT жалуется, что находится где-то внутри функции show () QWidget, что на самом деле не имеет смысла для меня.

Кто-нибудь может мне помочь? Спасибо!

1 Ответ

0 голосов
/ 13 октября 2011

Оказывается, это было что-то еще проще.Я привык к Objective-C, где ivars автоматически инициализируется до 0. C ++ не делает этого.Итак, я должен был убедиться, что _mainWindow был инициализирован в NULL в конструкторе.Проблема решена.

...