Qt 媒體播放器項目中,添加文件點擊確定後程序崩潰,調試提示段錯誤(Segmentation Fault)。本文分析常見原因與排查方法。
QFileDialog::getOpenFileNames() 或類似靜態方法段錯誤 = 訪問非法內存,Qt 文件對話框相關崩潰 90% 由以下原因導致:
QStringList files = QFileDialog::getOpenFileNames(this, "選擇媒體", "", "媒體文件 (*.mp4 *.mp3)");
if (files.isEmpty()) return; // 用戶取消
// 後續處理 files...
QMetaObject::invokeMethod 或信號槽切回主線程QMAKE_CXXFLAGS += -fsanitize=address 編譯,能精準定位越界/釋放後使用// ❌ 錯誤:未判空直接取第一個
QString file = QFileDialog::getOpenFileName(this, "選擇");
ui->label->setText(file); // 用戶取消時 file 為空,某些操作可能崩潰
// ✅ 正確
QString file = QFileDialog::getOpenFileName(this, "選擇");
if (!file.isEmpty()) {
ui->label->setText(file);
player->setMedia(QUrl::fromLocalFile(file));
}
Qt 崩潰多為指針/線程/生命周期問題,善用調試器斷點 + ASan,能快速定位 99% 段錯誤根因。