gpt4 book ai didi

C++ try catch 不适用于超出范围的数组

转载 作者:行者123 更新时间:2023-11-30 04:51:24 25 4
gpt4 key购买 nike

我们有一个基于 QT 的 C++ 应用程序。我们也在其中使用第三方 dll。但是,C++ try and catch 根本不起作用。

例如:

#include <QCoreApplication>
#include <QDebug>
#include <QException>

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);

int arr[10];
try
{
arr[11] = 30;
}
catch (const std::out_of_range& e)
{
qDebug() << "Exception out of range occurred ..." << e.what();
}
catch (...)
{
qDebug() << "Unknown Exception occured...";
}

return a.exec();
}

以上是最小的例子。在上面它使程序崩溃。有办法处理吗?

最佳答案

读取或写入超出数组边界的行为是未定义的行为。无法保证它会崩溃、抛出异常或做任何事情。这只是格式错误的代码。

如果你想要一个带有边界检查的类似数组的容器,有 std::array , std::vector ,也许 std::deque在标准库中。它们都有一个 at() 成员函数,该函数执行边界检查并会抛出一个 std::out_of_range 异常。

关于C++ try catch 不适用于超出范围的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54826385/

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