Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt程序在退出时崩溃_Qt - Fatal编程技术网

Qt程序在退出时崩溃

Qt程序在退出时崩溃,qt,Qt,我正在创建我的第一个Qt程序之一。我在这里有一个登录表单,然后提供的用户名和密码将被检查到MYSQL数据库。 如果有一个记录使用这个用户名和密码,那么它正在生成一些 ui->something->hide(); 运行时没有特殊的Qt控制台输出,但当我按“x”按钮关闭它时,程序崩溃 我以调试模式运行它。 我得到的是: “由于接收到来自操作系统的信号,下位机停止运行 系统。 信号名称:SIGSEGV信号含义:分段故障 可能发生的情况是,您有一个超出范围的对象 当某些内容被删除或不再可访

我正在创建我的第一个Qt程序之一。我在这里有一个登录表单,然后提供的用户名和密码将被检查到MYSQL数据库。 如果有一个记录使用这个用户名和密码,那么它正在生成一些

ui->something->hide();
运行时没有特殊的Qt控制台输出,但当我按“x”按钮关闭它时,程序崩溃

我以调试模式运行它。 我得到的是:

“由于接收到来自操作系统的信号,下位机停止运行 系统。 信号名称:SIGSEGV信号含义:分段故障


可能发生的情况是,您有一个超出范围的对象

当某些内容被删除或不再可访问,然后您尝试访问它时,您将得到此信息

你应该采取两项行动:

如果您在Qt中创建了一个对象,请将其放在堆上,然后在对象树中将其作为父对象

例如:

QLabel * label = new QLabel();  // put it on the heap using new

ui->centralWidget()->layout()->addWidget(label);
您的标签现在位于对象树中。标签的父对象是布局对象。它的父对象是中心小部件。它的父对象是ui

当窗口关闭时,它将自动清理所有子项,或者换句话说,您不必对每个子项都调用delete

偶尔,示例会显示堆之外的内容,但在较大的示例中,这通常不会很好地工作,除非它是一个像对话框这样的短期项目,在其他任何地方都不会被引用

此外,在closeEvent()中,您应该清理对数据库的访问。查看数据库示例,找到用于关闭数据库句柄的代码行

如果您正在清理,并且在运行时它可能不可用,您应该检查

if(label)
    label->setText("I am closing now");
在某些情况下,您可能希望在删除或关闭指针后将其设置为零


希望这有帮助。

尝试检查堆栈框架,例如使用GDBC,您可以在此处发布一些代码吗?如果仅通过查看此程序集无法判断问题所在,则应扔掉计算机并放弃编程:D