首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Qt 登錄界面跳轉異常退出:重複 new 導致雙重釋放/邏輯錯誤

     編輯:程式設計疑難解答

現象

登錄成功後程序異常關閉。代碼中 `Login` 構造函數已 `new Information()`,登錄槽函數中又 `new Information()` 並 `show()`。

原因

  • 兩個 `Information` 實例同時存在,可能導致資源衝突、雙重釋放、事件循環混亂。
  • 邏輯應為:登錄成功 → `hide()` 登錄窗 → `show()` **已存在**的主窗口實例。

修正代碼

// Login.h
class Login : public QWidget {
    Q_OBJECT
    Information *mainWin; // 成員持有主窗口指針
public:
    Login(Information *win, QWidget *parent=nullptr) : QWidget(parent), mainWin(win) {}
    // ...
private slots:
    void onLoginClicked() {
        if (checkAccount()) {
            this->hide();
            mainWin->show(); // 顯示傳入的唯一實例
        }
    }
};

// main.cpp
int main(int argc, char *argv[]) {
    QApplication a(argc, argv);
    Information w; // 棧上或堆上唯一實例
    Login login(&w);
    login.show();
    return a.exec();
}

關鍵點

  • 主窗口在 `main` 創建,傳遞指針給登錄窗口。
  • 登錄窗口不負責創建主窗口,只負責顯示/隱藏。
  • 避免 `new` 多個同類頂級窗口。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved