2011-10-13 5 views
0

QT 앱을 쓰고 있는데 C++로 녹슨 것이므로 그게 문제입니다. Mac에서 exc_bad_access 신호로 충돌이 발생했습니다. 이는 메모리가 잘못되어 있음을 의미합니다.QT 앱에서 exc_bad_access 충돌이 발생했습니다.

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는 인스턴스 변수이며, (당신은 함수 서명에서 짐작 하듯이) 포인터 : 여기에 내 코드입니다. 그것은 단순한 게으른 로딩입니다. I 생각해 보자. 나는이 클래스가 객체를 소유하고 있기 때문에 메모리 관리를하고있다. (나중에 소멸자에서 삭제됨).

충돌이 w -> show(); 줄에서 발생하면 QT는 QWidget show() 함수 내부에 불만을 제기합니다. 실제로는이 사실을 알지 못합니다.

누군가 나를 도울 수 있습니까? 감사!

답변

0

그것은 더 단순한 것으로 밝혀졌습니다. 나는 ivars가 자동으로 0으로 초기화되는 Objective-C에 익숙하다. C++은 이것을하지 않는다. 그래서, 나는 생성자에서 NULL로 초기화 된 _mainWindow인지 확인해야했다. 문제 해결됨.

관련 문제