我在我正在处理的Qt应用程序中看到一个奇怪的崩溃,我想知道是否有人看到过类似的东西或知道可能是什么原因。
崩溃是由于访问冲突引起的,并且在调用QMessageBox :: question()的情况下,发生这种情况的发生率大约为30%。该应用仅在“发布”模式下崩溃(在“调试”中则永远不会崩溃)。
导致崩溃的代码看上去完全是无害的:
QMessageBox::question(
this,
QString("Deleting configuration"),
QString("Are you sure you want to delete this configuration?"));
对话框是使用静态函数调用(如上)还是显式创建的都没有关系。其他带有图标的标准对话框(QMessageBox :: critical(),QMessageBox :: information()等)也会导致此崩溃,但是有趣的是,没有任何图标的默认QMessageBox对话框从不崩溃。但是,通过setIcon()
添加标准图标后,崩溃再次出现:
QMessageBox dialog;
dialog.setText("Blah blah blah");
dialog.setIcon(QMessageBox::Question);
dialog.exec();
可能与这些对话框中的标准图标有关吗?崩溃仅发生在第一个对话框显示上;一旦显示单个对话框而没有崩溃,则所有后续对话框都将正常工作。
Qt版本为5.12.2,该应用程序使用Visual Studio 2017 x64 C ++编译器进行编译。