从小白开始学C++ 异常(abort)

C++ 异常 异常异常的概述了解基本方法调用abort()返回错误码异常机制四级标题五级标题六级标题三级目录值 异常的概述 程序有时会遇到运行阶段错误,导致程序无法正常的运行下去。例如:程序可能试图打开一个不可用的文件,请求过多的内存,或者遭到不能容忍的值。通常,程序员都会试图预防这种意外情况。所以c++出现了异常的功能。 了解基本方法 讨论异常之前,了解可使用的一些基本方法,例:计算两个的调和平均数的函数为例。两个数的调和平均数的定义是:这两个数字倒数的平均值的倒数。表达式:2.0xy/(x+y) 如果y是x的负值,则 阅读详情


终于我们把类与对象的基本知识讲完了!

这篇文章简单讲述C++对于异常的处理

什么是异常

一般来说,程序在运行阶段发生错误,导致程序无法正常运行下去的情况就是异常

比如内存已满,但仍然再请求内存,比如程序打开一个无法识别的文件,比如指针指向了一个未知的地方却仍然调用它做一系列操作等待

调用abort()函数

我们最常用的处理异常的方式就是调用函数abort(),函数的原型在cstdlib中,当程序发生错误时,调用abort()函数提前终止程序,避免引起下面更多不可预知的错误

我们写一个简单的程序验证:

#include <iostream>
#include <cstdio>

using namespace std;

double hmean(double x, double y);
int main()
{
    double x, y, z;
    cout << "enter two numbers:\n";
    int num = 0;
    while(num<5)
    {
        cin >>x>>y;
        z = hmean(x, y);
        cout << "when we enter the proper number we can see the value : "<<z<<endl;
        num++;
    }
    cout << "all the input are right!\n";
    return 0;
}

double hmean(double x, double y)
{
    if(x==-y)
    {
        cout << "untenable arguments to hmean()\n"<<endl;
        abort(); // 提前终止程序
    }
    return x*y/(x-y);
}

程序很简单所以就不给很多注释了,大家可以自行阅读

我们输入两个数,然后返回他们的乘积除以他们的差,当两个数为相反数时,我们抛出异常,否则返回正确的值,当次数达到五次时,说明输入的所有数据都是没有问题的

输出结果:

enter two numbers:
8 9
when we enter the proper number we can see the value : -72//返回值
1 -1
untenable arguments to hmean() //抛出异常

异常机制

发生异常情况时,人为规定的一种响应方式。

一般由三个模块组成

  • 引发异常
  • 捕获异常
  • 使用try模块

这里面对应了三个关键字:try, catch, throw

我们还是通过上面的例子改装一下,看看这三个模块是如何运作的

#include <iostream>
#include <cstdio>
using namespace std;

double hmean(double x, double y);
int main()
{
    double x, y, z;
    cout << "enter two numbers:\n";
    int num = 0;
    while(num<3)
    {
        cin >>x>>y;
        try
        {
            z = hmean(x, y);
        }
        catch(const char *s)
        {
            cout << s << endl;
            cout << "you should enter a pair of proper numbers: \n";
            continue;
        }
        cout << "when we enter the proper number we can see the value : "<<z<<endl;
        num++;
    }
    cout << "all the input are right!\n";
    return 0;
}

double hmean(double x, double y)
{
    if(x==-y)
    {
        throw "we can't divide 0!\n";
    }
    return x*y/(x-y);
}

先给出结果:

enter two numbers:
2 3
when we enter the proper number we can see the value : -6
1 -1
we can't divide 0!

you should enter a pair of proper numbers:
6 5
when we enter the proper number we can see the value : 30
2 -2
we can't divide 0!

you should enter a pair of proper numbers:
1 2
when we enter the proper number we can see the value : -2

all the input are right!

我们可以从输出结果来看看我们的异常机制是如何工作的

首先我们输入两个数据,然后进入try模块

 try
 {
     z = hmean(x, y);
 }

执行try模块中的语句,也就是函数hmean

double hmean(double x, double y)
{
    if(x==-y)
    {
        throw "we can't divide 0!\n";
    }
    return x*y/(x-y);
}

当我们的数据没有问题,也就是输入的两个数不是相反数时,我们直接返回值,然后因为没有抛出异常(throw)所以我们不需要捕获(catch)异常并处理,我们直接跳过catch模块进行值的输出,所以结果的前三行输出就是这样得来的

enter two numbers:
2 3
when we enter the proper number we can see the value : -6
// 跳过了catch

然后我们输入了一对错误的数据,同样我们进入try模块,然后在函数中我们会抛出异常

if(x==-y)
{
    throw "we can't divide 0!\n";
}

当异常抛出时,我们程序就会查找与异常类型相匹配的catch模块,也就是我们throw的是一个字符串,那么我们的catch模块的括号中应该匹配字符串类型

catch(const char *s)//匹配字符串类型的异常
{
        cout << s << endl;
        cout << "you should enter a pair of proper numbers: \n";
        continue;
}

这里我们打印了抛出的错误(throw的内容会传递到const char*s),然后我们指出需要重新输入正确的一对数字,然后这里我们使用了循环中才会使用的continue,跳过while后面的语句回到开头,重新输入数字

所以只有当我们正确的输入三组数据时,程序才会结束;异常时则抛出异常并让你重新输入

注意: 一个try可以有多个catch模块

当然我们可以将异常也封装成类,然后根据异常的不同调用不同的异常类

感谢您的耐心阅读!

深入浅出 C++:与程序终止相关的函数 PART 3 - abort()、terminate() abort() [[noreturn]] void abort() noexcept; abort() 与 exit()、quick_exit() 函数使用时机区别如下: . exit()、quick_exit() 不管是借由传入 EXIT_SUCCESS、0、EXIT_FAILURE 结束程序,意义上都属于程序走到原本预期的行为,正常结束。 . abort() 代表程序遇到了异常的情... 阅读详情

相关推荐

C++中的abort函数及示例代码

abort函数是一种用于终止程序执行的机制,当程序遇到无法处理的错误时,可以调用它来立即结束程序运行并生成一个异常终止信号。当程序遇到无法处理的错误或异常情况时,可以调用abort函数来立即结束程序运行并生成一个异常终止信号。在这种情况下,我们向标准错误流(std::cerr)输出一条错误信息,并紧接着调用abort函数。调用abort函数后,程序会立即终止执行,并生成一个异常终止信号。在实际编程中,可以根据需要在遇到其他无法处理的错误时调用abort函数来终止程序的执行。然后,我们检查除数是否为0。

CodeMaven的博客 685

C++学习---异常处理机制

在说C++异常处理机制之前,了解一下abort()函数和返回错误码的异常处理。Abort( )函数的原型位于头文件cstdlib(或stdlib.h)中,其典型实现是向标准错误流(即cerr使用的错误流)发送消息abnormal program termination(程序异常终止),然后终止程序。其部分实现代码:运行程序后,输入 10 和 -10 会返回错误信息,“”注意使用abort()函数的话是直接终止程序,而不是返回main()函数。比abort()函数更灵活。

Sciurdae的博客 980

C++程序中执行abort等操作导致没有生成dump文件的问题案例分析

本文详细讲述了调用abort函数强行终止进程导致没有生成dump文件的相关细节及处理办法。

dvlinker的技术专栏 1万+

c++ abort 函数_C ++中带有示例的abort()函数

c++ abort 函数 C ++ abort()函数 (C++ abort() function) abort() function is a library function of cstdlib header. It is used to abort the current process. For the abnormal program termination – we can use ...

cumudi0723的博客 6743

WebRTC开源库内部调用abort函数引发C++程序发生闪退问题的详细排查

本文讲述WebRTC开源库内部调用abort函数引发程序发生闪退问题的详细排查过程。

dvlinker的技术专栏 2万+

【Telephony】APN配置及加载流程&项目实践(AOSP)

学习APN关键是学会明白apns-conf.xml文件各个参数的意思,然后熟悉TelephonyProvider是如何读取文件创建数据库的,譬如数据库表的约束、文件的读写顺序等,还有读取后的ApnSetting的二次定制以及显示(例如屏蔽xcap等)。虽然一般在项目中APN的需求很简单,就是按照客户提供的APN参数添加上配置,或者在显示屏蔽一些参数,但是项目维护的过程中APN的问题也是比较多的。

weixin_44513784的博客 5514

C++中的异常处理机制:abort、exit、exception类和try..catch语句块

程序运行时有时会遇到错误,导致程序无法正常运行下去,通常程序员会试图预防这种意外。C++异常处理为这种情况提供了一种功能强大而灵活的工具。这里会介绍四种,分别是: • 调用abort()函数及assert()函数 • 调用exit()函数 • 异常捕获机制try…catch… • exception类 一. 调用abort()函数及assert()函数 abort()函数的原型位于头文件cstdlib(或stdlib.h)中,其典型实现是向标准错误流(即cerr使用的错误流)发送abnormal p

aishuirenjia的博客 1万+

雷达气象学(8)——反射率因子图实战(强对流预警篇)

本文聚焦雷达反射率因子图在强对流预警中的实战应用,深入解析了柱状回波、有界弱回波区(BWER)、三体散射(TBSS)等关键回波结构特征,这些是识别超级单体风暴和大冰雹的核心“身份证”。文章强调从静态识别转向动态追踪与多源数据综合研判的思维转变,并提供了系统的实战分析流程与常见误区避坑指南,旨在提升对强对流天气的短临预警能力。

weixin_29213827的博客 486

C++异常处理之abort()、异常机制、exception 类

程序运行时有时会遇到错误,导致程序无法正常运行下去,通常程序员会试图预防这种意外。C++异常为处理这种情况提供了一种功能强大而灵活的工具。这里仅总结三种: 调用abort()函数异常机制exception 类 一、调用abort()函数 Abort()函数的原型位于头文件cstdlib(或stdlib.h)中,其典型实现是向标准错误流(即cerr使用的错误流)发送 abn

u012507022的博客 1万+

用Python和NumPy搞定复合材料层合板ABD矩阵计算(附完整代码与避坑指南)

本文详细介绍了如何使用Python和NumPy高效计算复合材料层合板的ABD刚度矩阵,包括单层板刚度计算、偏轴转换和层合板刚度集成。通过完整的代码示例和工程实践技巧,帮助工程师快速构建定制化分析工具,解决航空航天、汽车制造等领域的复合材料力学性能分析问题。特别提供了避坑指南和性能优化策略,确保计算结果的准确性和效率。

weixin_30752699的博客 279

ESP32 BLE Mesh Provisioner实战:手把手教你用ESP-IDF配网智能灯泡(附常见错误排查)

本文提供了一份基于ESP-IDF的ESP32 BLE Mesh Provisioner实战指南,详细解析了配网器的核心角色与工作流程。文章手把手教你从工程搭建、代码初始化到核心回调解析,并重点针对常见的‘Model not bound to AppKey’等错误提供了深度排查思路与解决方案,帮助你构建一个稳定可靠的智能照明网关。

desk3的博客 515

C++_异常1-调用abort()

异常是相对较新的C++功能,有些老式编译器可能没有实现。另外有些编译器可能默认关闭这一特性,需要使用编译器选项来打开它。 这里先讨论一个基本问题: 2.0 * x * y / (x+y) 如果y是x的负值,则上述公式将导致被零除。这是一种不允许的运算。很多新式编译器通过生产一个表示无穷大的特殊浮点值来处理。 例如Inf,inf,INF等。 对于这种问题,处理方式之一就是,如果...

weixin_34204722的博客 595

ICC2: pin shape不在track上引起的drc如何解决?

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 435

C++异常 调用abort()

C++异常 调用abort()

p15097962069的博客 199

第10集:AIOps 平台架构设计!画出面试官最想看的系统全景图

本文介绍了如何将AIOps平台的六大功能模块整合为四层架构设计,并生成专业系统全景图。文章首先指出面试中架构设计能力的重要性,强调一张清晰的架构图能直观展现全局观。随后指导读者检查项目结构,准备绘图环境。核心部分详细拆解了四层架构:数据采集层(Prometheus、ELK等)、AI分析层(巡检、告警、预测等)、决策执行层(工作流引擎、自愈Agent)和展示交互层(API、控制台)。通过Python代码自动生成模块依赖关系图,并提供了面试讲解技巧。全文旨在帮助开发者在面试中系统性地展示项目架构设计能力。

qq_2937655951的博客 93

OceanBase数据库LSM-Tree存储引擎深度解析:合并写入与压缩优化策略

OceanBase数据库采用创新的LSM-Tree架构设计,通过"基线-增量"分离存储实现高性能。内存中的MemTable处理写入,磁盘上的SSTable存储有序数据,利用多级缓存加速读取。写入时先写日志再更新内存,合并操作将增量数据整合为基线数据以优化查询性能。相比传统B+树引擎,OceanBase在写入吞吐、压缩效率和存储成本方面优势显著,特别适合写入密集型场景。合并操作作为核心机制,通过多种触发方式和执行策略平衡性能与资源消耗。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1342

c++异常 , 抛出字符串异常abort()has been called

函数返回值可以忽略,但是异常不可以 整形返回值没有任何语义信息,而异常包含语义信息 整形返回值缺乏相关的上下文信息。异常作为一个类,可以拥有自己的成员,这些成员就可以传递足够的信息。 异常处理可以在调用跳级 // 异常.cpp: 定义控制台应用程序的入口点。 // #include "stdafx.h" #include<iostream> using namespace std; ...

庸人自扰 2489

Unity零基础到进阶 | Unity中的内存泄漏全解析,原因、排查及避免

Unity 内存泄漏并非传统C++语境中的野指针或未释放堆内存,而是基于其「托管内存(C#)+ 原生内存(引擎/非托管)」双架构的特殊问题——即已废弃、不再被业务逻辑使用的内存块,无法被引擎或系统自动回收,持续占用内存空间,最终引发内存暴涨、GC卡顿、OOM(内存溢出)崩溃,其中移动端、主机端受影响最显著。 Unity 内存主要分为三类,其中泄漏仅发生在前两类,栈内存因系统自动分配/释放,无泄漏风险:

努力前行,总会成为自己心中的那道光 1万+

C++异常

程序有时候会在运行阶段出现错误,导致程序无法正常继续运行下去,例如,程序会试图打开应该不可用的文件,请求过大的内存等等,通常,我们都需要预防这种情况的发生,C++异常为处理这种情况提供了一种功能强大且灵活的工具,异常是相对较新的C++功能,可能有些老的编译器会不支持这种功能我们通过一个例子来看看一些不使用异常的方法,例如我们编写一个计算两个数的调和平均数,两个数的调和平均数是两个数倒数的平均值的倒数,因此表达式为2.0 * x*y / (x + y),因此。

u011381222的博客 1459

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

【C++】cstdlib中exit/abort/atexit

http://www.cplusplus.com/reference/clibrary/cstdlib/abort/ http://www.cplusplus.com/reference/clibrary/cstdlib/exit/ http://www.cplusplus.com/reference/clibrary/cstdlib/atexit/ exit Terminat

2095

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

abort()异常终止函数

是一个“紧急停车”的函数。当程序运行到某个点,发现自己处于一个无法理解或处理的严重错误状态时,为了防止更大的问题(例如数据损坏、安全漏洞),它会选择立即。它不进行任何清理,并通常会留下核心转储,以便开发者事后分析问题。,它无法继续安全地执行下去。是一个 C/C++ 标准库函数,定义在。函数通常用于表示程序遇到了一个。

zhou_7jh的博客 801

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

exit abort return 区别

Exit abort return 三者区别        exit() 结束当前进程/程序,在整个程序中,只要调用 exit ,就结束。return() 是当前函数返回,当然如果是在主函数main, 自然也就结束当前进程了,如果不是,那就是退回上一层调用。在多个进程时.如果有时要检测某个进程是否正常退出的.就要用到这个进程的返回值。exit(0)表示进程正常退出. 返回 0; exit(1)表

新一代视频编解码技术HEVC/3D-HEVC/HTM研究 1336

abort()、exit()、atexit使用

abort()、exit()、atexit\atexit使用 1. abort() 立即终止当前进程,产生异常程序终止 进程终止时不会销毁任何对象 示例: /* abort example */ #include &lt;stdio.h&gt; /* fopen, fputs, fclose, stderr */ #include &lt;stdlib.h&gt; ...

zt_xcyk的专栏 2万+

C++异常详解

在C++中,abort()函数用于终止程序的执行。abort()调用abort()函数会导致程序立即终止,并生成一个异常终止信号并将其发送到标准错误流。程序的终止是非正常的,它不会执行任何的析构函数、清理操作等。通常情况下,abort()函数被用于处理严重错误或异常情况,强制终止程序以避免进一步的损害。示例使用abort()int a = 0;abort();// 如果 a 等于 0,强制终止程序return 0;在上面的示例中,如果a的值等于0,则调用abort()函数终止程序的执行。

2301_80224556的博客 1801

[C++] 退出清理函数解读(exit、_exit、abort、atexit)

退出相关函数说明:在C++中,exit_exit(或_Exit)、abort和atexit是用于控制程序退出和清理的标准库函数。

wangdsh的博客 4932
上一篇: scikit-learn机器学习十 (支持向量机SVM)
下一篇: scikit-learn机器学习十一 (再谈线性回归)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

国家一级假勤奋研究牲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值