我每天都在处理一个应用程序已经有一段时间了,就像几周一样,并且已经有了很长的发展。
我有一个不必要的类,只是转发对象创建。它基本上是一个“Window”类,它创建了一个“Widget”类。因此,我不是通过那个不必要的“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,在调试和发布模式下都运行了它们都是一样的。
我不是在寻找如何解决这个问题的答案。我正在寻找的是,如果有其他人经历过这一点。这对我来说没有任何意义,我也看不出它可能会崩溃......这是Qt中的一个错误还是什么?
答案 0 :(得分:1)
听起来你有一个内存管理问题 - 要么没有正确初始化,要么踩到别人的内存(缓冲区溢出)。 qDebug创建了一个相当重要的缓冲区 - 当它被踩到时不会使你的程序崩溃,或者对于未初始化的值,可以改变它们的默认值。
我会仔细检查你的初始化。特别是检查构造函数中处理的内容,这些内容可能是使用您删除的上一个类中的初始化程序传递的。
e.g。
Foo::Foo(QObject *parent) : QObject(parent)