一段时间以来,我每天都在开发一个应用程序,现在已经有几周了,并且在开发方面取得了很大进展。
我有一个不必要的类,它只是转发一个对象创建。它基本上是一个创建“Widget”类的“Window”类。因此,我没有通过那个不必要的“Window”类来创建“Widget”类,而是直接在主“App”类中创建了“Widget”类。但现在,如果我运行它,应用程序就会崩溃,就像它处于某个递归循环中一样,并且不会显示窗口。
我在每行上添加了一些 QDebug 消息以查看它在崩溃之前到达了哪里,然后它运行得很好。这到底是怎么回事?它像这样运行得很好:
void App::initialize()
{
qDebug() << "Initializing...";
qDebug() << "Creating the widget";
widget = new Widget();
qDebug() << "Showing the widget...";
widget->show();
qDebug() << "Initialized";
}
但是,如果我删除前两个 QDebug 消息中的任何一个,它就会陷入类似递归的循环中。我不知道为什么要这样做。我已经检查了项目文件和 qmake,在调试和 Release模式下都运行了,而且都是一样的。
我不是在寻找如何解决这个问题的答案。我正在寻找的是是否有其他人经历过这种情况。这对我来说毫无意义,我不明白它怎么可能崩溃...这像是 Qt 中的错误还是什么?
最佳答案
听起来您遇到了内存管理问题 - 要么未正确初始化,要么占用了其他人的内存(缓冲区溢出)。 qDebug 创建了一个相当大的缓冲区——踩踏它不会使您的程序崩溃,或者对于未初始化的值可以更改其默认值。
我会仔细检查你的初始化。尤其要检查在您的构造函数中处理的事情,这些事情可能已经通过您删除的上一个类的初始化程序传递。
例如
Foo::Foo(QObject *parent) : QObject(parent)
关于c++ - 如果在没有 QDebug 消息的情况下运行,Qt 应用程序会崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24500991/