就在最近,我在我的计算机上安装了 Qt 库,作为一个完整的新手,我在线查找了 Qt 4.7 入门指南。
就在第一页,他们提供了以下代码:
1 #include <QtGui>
2
3 int main(int argv, char **args)
4 {
5 QApplication app(argv, args);
6
7 QTextEdit textEdit;
8 QPushButton quitButton("Quit");
9
10 QObject::connect(&quitButton, SIGNAL(clicked()), qApp, SLOT(quit()));
11
12 QVBoxLayout layout;
13 layout.addWidget(&textEdit);
14 layout.addWidget(&quitButton);
15
16 QWidget window;
17 window.setLayout(&layout);
18
19 window.show();
20
21 return app.exec();
22 }
简单的东西,我想。在 Visual Studio Express 2010 中编写此代码、构建和运行后,几乎一切正常。但是,当我尝试通过“退出”按钮或显示窗口右上角的红色 x 关闭窗口时(启动“return app.exec()”),我收到以下信息:
一个对话框说,
ParticleTracker.exe 中 0x77bc15de 处的未处理异常:0xC0000005:访问冲突读取位置 0xdf94b4b4。
控制台输出说,
Critical error detected c0000374
Windows has triggered a breakpoint in ParticleTracker.exe.
This may be due to a corruption of the heap, which indicates a bug in ParticleTracker.exe or any of the DLLs it has loaded.
This may also be due to the user pressing F12 while ParticleTracker.exe has focus.
进入调试模式后,我继续通过调用堆栈,同时反复收到堆损坏错误。
First-chance exception at 0x77c6e6c3 in ParticleTracker.exe: 0xC0000374: A heap has been corrupted.
Unhandled exception at 0x77bc15de in ParticleTracker.exe: 0xC0000374: A heap has been corrupted.
所有后续异常都发生在可执行文件的 0x77bc15de 处,内存地址 0xC0000374 为损坏的堆。
老实说,我不确定我是如何得到这个问题的。我不精通 C++,但代码似乎没有任何问题。
在调用堆栈中,进程当前卡在: ParticleTracker.exe!main(int argv, char** args) 第 20 行 + 0x27 字节 如果我进入反汇编,进程卡在:
return app.exec();
00FE3831 mov esi,esp
00FE3833 call dword ptr [__imp_QApplication::exec (0FE93D0h)]
00FE3839 cmp esi,esp
00FE383B call @ILT+320(__RTC_CheckEsp) (0FE1145h)
00FE3840 mov dword ptr [ebp-150h],eax
00FE3846 mov byte ptr [ebp-4],5
00FE384A mov esi,esp
00FE384C lea ecx,[ebp-84h]
00FE3852 call dword ptr [__imp_QWidget::~QWidget (0FE9404h)]
00FE3858 cmp esi,esp
有小费吗?非常感激。:)