C++ std::bad_alloc 异常
这篇短文讨论了 C++ 中 std::bad_alloc()
异常的主要原因。 它还讨论了使用 C++ 异常处理顺利处理此运行时异常的方法。
C++ 中的异常处理
所有异常均源自 std::exception
类。 这是一个可以修复的运行时错误。
如果我们不处理异常,程序将打印一条失败消息并终止。 借助异常,执行控制可以从程序的一个部分转移到另一部分。
C++使用try、catch、throw这三个关键字来处理异常。
关键词 | 说明 |
---|---|
throw | 我们使用 throw 关键字抛出异常,并定义在代码的一部分可能导致问题时可能出现的异常类型。 |
try | 可以产生错误并且必须抛出异常的代码段包含在try 块中。 |
catch | 引发异常时调用的块称为 catch 块。 如有必要,我们可以通过编程方式停止应用程序,并通知用户该代码块中的错误。 |
C++ 中的 std::bad_alloc 异常
每当我们尝试使用 new 关键字创建对象时,编译器都会请求堆上的内存。 如果堆上没有所需的内存量,则会引发异常,称为 std::bad_alloc 异常。
如果使用 new 关键字或动态数组声明单个对象,如果所需的内存不可用,则会在运行时抛出异常。
让我们看一下下面的示例来处理 bad_alloc 异常。
示例代码:
#include <iostream>
#include <new>
int main () {
try
{
int* newarr= new int[2000000000];
}
catch (std::bad_alloc& all)
{
std::cerr << "bad_alloc exception occurred: " << all.what() << '\n';
}
return 0;
}
输出:
bad_alloc exception occurred: std::bad_alloc
如果我们不将此代码包含在 try-catch 块中,这可能会导致我们的程序崩溃。 为了避免这种情况,我们应该始终处理这个异常,以便通过通知用户错误来正常终止程序。
相关文章
Arduino 复位
发布时间:2024/03/13 浏览次数:315 分类:C++
-
可以通过使用复位按钮,Softwarereset 库和 Adafruit SleepyDog 库来复位 Arduino。
Arduino 的字符转换为整型
发布时间:2024/03/13 浏览次数:181 分类:C++
-
可以使用简单的方法 toInt()函数和 Serial.parseInt()函数将 char 转换为 int。
Arduino 串口打印多个变量
发布时间:2024/03/13 浏览次数:381 分类:C++
-
可以使用 Serial.print()和 Serial.println()函数在串口监视器上显示变量值。