gpt4 book ai didi

c++ - Qt中如何捕获 "index out of range"异常

转载 作者:太空宇宙 更新时间:2023-11-04 11:52:33 24 4
gpt4 key购买 nike

如何在 Qt 中捕获“索引超出范围”异常?我使用了 try/catch,但看起来它不起作用。

try {
QStringList list;
QString str = list[1];
} catch (...) {
qDebug()<<"error";
}

在 Windows XP 中,我可以看到下面弹出的对话框:

---------------------------
K.exe - Application Error
---------------------------
The instruction at "0x0040144c" referenced memory at "0x00040012". The memory could not be "written".


Click on OK to terminate the program
Click on CANCEL to debug the program
---------------------------
OK Cancel
---------------------------

这就是我需要这样做的原因。我们一些经验不太丰富的工程师需要使用一小部分Qt C++语言来做一些自动化测试工作。我们不能强制他们作为经验丰富的设计师使用 QList。所以我会 try catch 并记录错误,这样他们的自动化测试脚本就不会崩溃,并且很容易找出错误点。 ——中珠昨天

最佳答案

正如评论者所指出的,你不能。

虽然 Qt 支持异常,但它并不使用它们。 qt-project 论坛上有人建议这是为了增加可移植性(因为某些平台不支持异常处理)。

另一种方法是在尝试访问值之前自行检查它们,或者为需要异常处理的类构建自己的包装器。

说明差异的示例:

#include <QCoreApplication>

#include <QString>
#include <QDebug>
#include <QStringList>
#include <vector>
void t1()
{
std::vector<int> vec;
vec.push_back(1);
vec.push_back(2);
vec.push_back(4);

qDebug() << "Val: " << vec.at(3);
}


void t2()
{
QStringList sl;
sl << "Foo" << "Bar" << "Herp" << "Derp";

qDebug() << sl.at(0);
qDebug() << sl.at(5);
}

void t3()
{
qDebug() << "Going down!";
abort();
}

int main()
{
try {
t1();
//t2();
//t3();
} catch (...) {
qDebug() << "Close one...";
}
}

关于c++ - Qt中如何捕获 "index out of range"异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17518769/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com