![](/img/trans.png)
[英]C++ QT Exception code 0xc0000005 read access violation at: 0x0, flags=0x0
[英]“Internal error: pc 0x0 in read in psymtab, but not in symtab.” error in QT while trying to implement simple MVC
我正在嘗試在QT中實現一個簡單的MVC。 目標是擁有一個渲染小部件,一個模型和一個控制器。 該控制器將是帶有“ render”方法的抽象基類,因此每個控制器都知道如何在要繪制的東西上繪制其模型。 我已經建立了一個非常簡單的示例來說明我要完成的工作,但是在調試時,幾乎立即顯示以下錯誤:
內部錯誤:在psymtab中讀取了pc 0x0,但在symtab中沒有讀取。
我已盡力減少重現該錯誤。 盡管代碼將運行並退出,並顯示以下內容,但是嘗試創建RenderWidget會導致一些錯誤,包括分段錯誤崩潰(在調試模式下)。
任何幫助,將不勝感激。 我在下面提供了重現此錯誤所需的最少代碼。 這是在沒有表格的空QT Widget項目中完成的。
我花了更多時間來解決這個錯誤,並進一步縮小了范圍。 根據Mitch的建議,我將代碼進行了進一步的縮減,並將其全部移動到一個Main.cpp文件中。 如果在Main方法中放置一個斷點並進入MainWindow構造函數,則會出現錯誤。
#include <QApplication>
#include <QWidget>
#include <QMainWindow>
class RenderWidget : public QWidget
{
Q_OBJECT
public:
explicit RenderWidget(QWidget *parent = 0);
};
RenderWidget::RenderWidget(QWidget *parent) :
QWidget(parent)
{
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
private:
RenderWidget* m_renderArea;
};
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
m_renderArea = new RenderWidget(this);
}
MainWindow::~MainWindow()
{
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
#include "main.moc"
看來問題出在我安裝的QT版本或我正在使用的調試器上。 即使我創建了一個新項目,該問題仍然存在。 安裝QT 5.3並獲取Windows調試工具的最新版本后,該錯誤似乎消失了。
您應該在Controller中刪除或實現您的構造函數:
//Controller();
要么
Controller() {}
此外,在ControllerA
,您還應該調用基類:
ControllerA::ControllerA()
: Controller()
{
}
最后, ui_renderArea
未初始化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.