gpt4 book ai didi

c++ - 示例提供的代码中的 Qt 堆损坏

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:31:53 26 4
gpt4 key购买 nike

最近我在我的电脑上安装了 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.

进入 Debug模式后,我继续遍历调用堆栈,同时反复收到堆损坏错误。

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++,但代码似乎没有任何问题。

在Call-Stack中,进程目前卡在: 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

有什么建议吗?非常感激。 :)

最佳答案

试试这个

#include <QtGui>

int main(int argv, char **args)
{
QApplication app(argv, args);

QTextEdit *textEdit = new QTextEdit();
QPushButton *quitButton = new QPushButton("Quit");

QObject::connect(quitButton, SIGNAL(clicked()), qApp, SLOT(quit()));

QVBoxLayout *layout = new QVBoxLayout();
layout->addWidget(textEdit);
layout->addWidget(quitButton);

QWidget *window = new QWidget();
window->setLayout(layout);

window->show();

return app.exec();
}

关于c++ - 示例提供的代码中的 Qt 堆损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11140302/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com