Qt显示对话框程序崩溃

问题描述

创建一个继承自QDialog的对话框DialogA,在主窗体显示之前进行显示,当执行DialogA的exec函数时,程序崩溃,提示:Critical error detected c0000374

问题排查

查看DialogA类中的内存创建是否存在异常,排查后未发现此问题。注释程序主体代码,程序运行正常,没有崩溃。局部放开注释代码,缩小问题点。经过调试,崩溃点:this->setAttribute(Qt::WA_DeleteOnClose); 删除该属性定义,问题解决。

原因分析

当 QDialog::exec() 被调用时,它会进入一个局部事件循环。如果 Qt::WA_DeleteOnClose 属性被设置,当对话框关闭时,Qt 会尝试删除对话框对象。如果此时事件循环中还有未处理的事件或者定时器槽函数试图访问该对话框,就可能导致崩溃。

问题验证

cpp 复制代码
DialogA dialog;
int result = dialog.exec();
if (result != QDialog::Accepted)
{
	return -1;
}

在return语句处打上断点,程序会多次进入该断点处。

相关推荐
IvorySQL20 分钟前
PostgreSQL 18 - 时间约束 (Temporal Constraints)
数据库·postgresql·开源
Q***l68730 分钟前
C++在计算机图形学中的渲染
开发语言·c++
q***614130 分钟前
从MySQL迁移到PostgreSQL的完整指南
数据库·mysql·postgresql
0和1的舞者36 分钟前
《网络编程核心概念与 UDP Socket 组件深度解析》
java·开发语言·网络·计算机网络·udp·socket
惜棠38 分钟前
visual code + rust入门指南
开发语言·后端·rust
n***i9539 分钟前
Rust在嵌入式系统中的内存管理
开发语言·后端·rust
q***062939 分钟前
ThinkPHP和PHP的区别
开发语言·php
N***73851 小时前
SQL锁机制
java·数据库·sql
Java天梯之路1 小时前
Java 初学者必看:接口 vs 抽象类,到底有什么区别?
java·开发语言
小羊在奋斗1 小时前
MySQL表的约束:从基础到核心(附场景+案例)
android·数据库·mysql