void MainWindow::on_actTab_SetSize_triggered()
{
QWDialogSize* dlgTableSize = new QWDialogSize(this); //这个是自定义对话框
Qt::WindowFlags flags = dlgTableSize->windowFlags();
dlgTableSize->setWindowFlags(flags | Qt::MSWindowsFixedSizeDialogHint);
dlgTableSize->setRowColumn(theModel->rowCount(), theModel->columnCount());
int ret = dlgTableSize->exec();
if (ret == QDialog::Accepted)
{
int cols = dlgTableSize->columnCount();
theModel->setColumnCount(cols);
int rows = dlgTableSize->rowCount();
theModel->setRowCount(rows);
}
delete dlgTableSize;
}
大佬们,为什么点击acttab时就报错说 引发了异常: 读取访问权限冲突。
引发了异常: 读取访问权限冲突
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- H3T 2023-04-08 22:12关注
在释放 QWDialogSize 对象时出现的悬空指针引起的。
这里用了delete关键字来释放QWDialogSize对象,但是如果释放该对象之后仍然存在指向它的指针,这些指针就会变成悬空指针然后导致读取访问权限冲突。
可以使用智能指针,比如std::unique_ptr,这样可以确保对象能正确地释放:void MainWindow::on_actTab_SetSize_triggered() { std::unique_ptr<QWDialogSize> dlgTableSize(new QWDialogSize(this)); // 使用 std::unique_ptr 管理对象生命周期 Qt::WindowFlags flags = dlgTableSize->windowFlags(); dlgTableSize->setWindowFlags(flags | Qt::MSWindowsFixedSizeDialogHint); dlgTableSize->setRowColumn(theModel->rowCount(), theModel->columnCount()); int ret = dlgTableSize->exec(); if (ret == QDialog::Accepted) { int cols = dlgTableSize->columnCount(); theModel->setColumnCount(cols); int rows = dlgTableSize->rowCount(); theModel->setRowCount(rows); } }
这里不需要调用 delete,对象将在离开作用域时自动被释放。
如果答案对您有所帮助,望采纳。解决 无用评论 打赏 举报
悬赏问题
- ¥15 SQLServer怎么录入下标
- ¥100 无网格伽辽金方法研究裂纹扩展的程序
- ¥15 错误于library(org.Hs.eg.db): 不存在叫‘org.Hs.eg.db’这个名称的程序包,如何解决?
- ¥60 求一个图片处理程序,要求将图像大小跟现实生活中的大小按比例联系起来的
- ¥50 求一位精通京东相关开发的专家
- ¥100 求懂行的大ge给小di解答下!
- ¥15 pcl运行在qt msvc2019环境运行效率低于visual studio 2019
- ¥15 MAUI,Zxing扫码,华为手机没反应。可提高悬赏
- ¥15 python运行报错 ModuleNotFoundError: No module named 'torch'
- ¥100 华为手机私有App后台保活