【C++】基础:常见错误与异常处理

news2024/12/25 3:29:59

😏★,°:.☆( ̄▽ ̄)/$:.°★ 😏
这篇文章主要介绍常见错误与异常处理。
学其所用,用其所学。——梁启超
欢迎来到我的博客,一起学习,共同进步。
喜欢的朋友可以关注一下,下次更新不迷路🥞

文章目录

    • :smirk:1. 知识介绍
    • :blush:2. 常见错误
    • :satisfied:3. 异常处理

😏1. 知识介绍

在C++中,异常处理是一种用于捕获和处理程序运行期间产生的错误情况的机制。异常处理允许我们在程序中指定可能会引发异常的代码块,并定义相应的处理逻辑。

C++ 异常处理涉及到的类和关键字有:

std::exception:是所有标准异常类的基类。可以自定义继承自std::exception的异常类。

std::runtime_error:表示运行时错误的异常类,如逻辑错误、资源不足等。

std::logic_error:表示逻辑错误的异常类,如无效参数、空指针等。

try、catch、throw:是C++中用于处理异常的关键字。

  • try:包含可能抛出异常的代码块,用于监视异常。

  • catch:用于捕获并处理异常的代码块。

  • throw:用于抛出异常

😊2. 常见错误

1.语法错误:这些错误通常是由于缺少分号、括号不匹配、拼写错误等导致的。

int x = 5  // 缺少分号
if (x > 0)  // 缺少右括号
cout << "Hello, World!" << endl;  // 拼写错误(应为 std::cout)

2.类型错误:这些错误通常是由于变量类型不匹配或者类型转换错误导致的。

int x = "Hello";  // 类型不匹配(应为 char* 或 std::string)
double result = 10 / 3;  // 整数除法结果赋给浮点数类型(应为 10.0 / 3.0)

3.数组越界:这些错误通常是由于访问数组时超出了有效索引范围导致的。

int arr[3] = {1, 2, 3};
int x = arr[3];  // 超出数组索引范围

4.空指针错误:这些错误通常是由于访问空指针导致的。

int* ptr = nullptr;
*ptr = 10;  // 访问空指针

5.逻辑错误:这些错误通常是由于程序逻辑错误或算法错误导致的。

for (int i = 0; i < 5; i--) {
    cout << i << " ";
}  // 循环条件错误(导致无限循环)

6.内存泄漏:这些错误通常是由于未正确释放动态分配的内存导致的。

while (true) {
    int* ptr = new int[100];
}  // 未释放动态分配的内存导致内存泄漏

😆3. 异常处理

简单的异常处理示例(除数为0):

#include <iostream>
#include <stdexcept>

int divide(int a, int b) {
    if (b == 0) {
        throw std::runtime_error("Division by zero!");  // 抛出异常
    }
    return a / b;
}

int main() {
    try {
        int result = divide(10, 0);  // 在 try 块中调用可能引发异常的函数
        std::cout << "Result: " << result << std::endl;
    } catch (const std::exception& ex) {
        std::cout << "Exception caught: " << ex.what() << std::endl;  // 捕获并处理异常
    }
    
    return 0;
}

在这里插入图片描述

以上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/913508.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IT运维:使用数据分析平台监控 Linux 节点

监控目标 监控 Linux 服务器的基本信息以及各项性能指标&#xff0c;包括&#xff1a; CPU 内存、Swap 网络 文件系统、磁盘 IO 解决方案 使用 Node exporter 收集硬件以及操作系统内核的指标数据&#xff0c;并通过 HTTP API 提供数据 使用 Vector agent 通过 Node export…

家庭装修设计施工团队进度小程序开发演示

传统装修企业获客难、获客成本高、竞争激烈&#xff0c;我们也是基于整个装修市场整体的需求&#xff0c;从用户角度出发帮助装修设计企业设计制作这款小程序。可以让传统装修企业搭上互联网的快车&#xff0c;形成线上获客裂变&#xff0c;降低获客成本提高客户信任度和签单率…

微信小程序 echarts 画多个横向柱状图

然后是json {"usingComponents": {"ec-canvas": "../../common/ec-canvas/ec-canvas"},"navigationBarTitleText": "主题活动" } ec-canvas获取方式 在链接里下载代码 然后copy ec-canvas文件夹到自己的项目 https://gi…

面试官问:说一说 Redis 的过期淘汰策略和内存淘汰策略 ?

目录 1. Redis 的过期淘汰策略 1.1 说一下定期删除的执行流程 2. Redis 的内存淘汰策略 2.1 LRU 和 LFU 有什么区别 3. Redis 中的过期淘汰策略和内存淘汰策略有什么区别 1. Redis 的过期淘汰策略 在了解过期淘汰策略之前&#xff0c;我们首先要知道 Redis 中的键值过期之后…

FreeRTOS软件定时器的原理以及使用实例

FreeRTOS软件定时器的使用 一.软件定时器介绍二.软件定时器工作原理三.创建软件定时器四.总结 一.软件定时器介绍 我们知道&#xff0c;如果是裸机系统的话&#xff0c;定时器都是由硬件中断完成的。还有一个中断服务函数。而FreeRTOS是一个操作系统&#xff0c;它提供了软件定…

MacBook上godep安装和使用

MacBook上godep安装和使用 #会在bin目录生成godep可执行文件 go get github.com/tools/godep#把godep可执行文件放到go的bin目录 cp bin/godep /Users/liang/software/go1.10.3/bin/godep helpgodep version#编译成二进制文件&#xff0c;执行二进制文件启动项目 如&#xff1…

【C++】使用Windows操作系统的API在控制台输出绿色的文本

2023年8月21日&#xff0c;周一下午 #include <Windows.h> #include <iostream>int main() {HANDLE hConsole GetStdHandle(STD_OUTPUT_HANDLE);// 设置文本颜色为绿色SetConsoleTextAttribute(hConsole, FOREGROUND_GREEN); std::cout<<"This text i…

树莓派4B raspiberry设置vnc远程登录

树莓派开启远程登录&#xff0c;本来通过raspi-config就可以设置的&#xff0c;但是这里安装的镜像可能不是官方镜像&#xff0c;导致raspi-config设置不生效。早先的版本可能通过raspi-config选择 Interfacing Options ,选择 Enable VNC就可以安装realvnc-vnc-server&#xff…

企业移动电子邮件管理(MEM)加强数据安全保护

什么是移动电子邮件管理 电子邮件是组织内部官方通信的主要方法&#xff0c;为了保持移动工作人员的连接和工作效率&#xff0c;必须在移动设备上访问其公司邮箱。通过移动电子邮件管理&#xff0c;IT 管理员可以促进在员工的智能手机、平板电脑和笔记本电脑上安全访问企业电子…

主机SSH连接VirtualBox NAT网络模式

遇到的问题 虚拟机使用桥接模式配置网络&#xff0c;主机可以ssh连接&#xff0c;但是虚拟机无法访问网络 使用NAT模式配置网络&#xff0c;虚拟机可以访问网络&#xff0c;但是主机无法通过ssh连接 解决方法 配置虚拟机端口转发 1 首先查看虚拟机ip 2 关闭虚拟机 配置端口…

python3.7 安装pywin32报错,完美解决方法

本机环境 python&#xff1a;3.7 遇到2种报错 第一种 ImportError: DLL load failed: The specified module could not be found.第二种&#xff1a; import win32gui ModuleNotFoundError: No module named ‘win32gui‘解决方法 我安装pywin32时候&#xff0c;是直接pi…

Docker 安装 Redis集群

1. 面试题 1.1 1~2亿条数据需要缓存&#xff0c;请问如何设计这个存储案例 单机单台不可能实现&#xff0c;肯定是用分布式存储&#xff0c;用redis如何落地&#xff1f; 1.2 上述问题工程案例场景设计类题目&#xff0c;解决方案 1.2.1 哈希取余分区 2亿条记录就是2亿个k,v&…

Spring复习:(56)PropertySourcePlaceholderConfigurer的工作原理

PropertySourcePlaceholderConfigurer的用途&#xff1a;通过配置文件&#xff08;比如.properties文件&#xff09;给bean设置属性&#xff0c;替代属性占位符 示例&#xff1a; 属性配置文件 spring.datasource.urljdbc:mysql://xxx.xxx.xxx.xxx/test spring.datasource.us…

C++信息学奥赛1122:计算鞍点

解题思路&#xff1a;这段代码的解题思路如下&#xff1a; 首先定义一个大小为5x5的二维数组arr来存储用户输入的矩阵元素。 使用两层嵌套循环&#xff0c;依次输入矩阵的每个元素。 接下来使用另外一个循环&#xff0c;遍历每一行。在每一行中&#xff0c;通过比较找到该行的…

编码器测速,获取实际速度

本例程中使用的电机为带霍尔编码器的减速电机&#xff0c;电机由三部分组成&#xff1a;减速器&#xff0c;电机以及霍尔编码器。 霍尔编码器工作原理&#xff1a;霍尔编码器通过电磁转换&#xff0c;将机械的位移转化为脉冲信号&#xff0c;并且输出A、B两相的方波信号&#x…

uniapp,使用canvas制作一个签名版

先看效果图 我把这个做成了页面&#xff0c;没有做成组件&#xff0c;因为之前我是配合uview-plus的popup弹出层使用的&#xff0c;这种组件好像是没有生命周期的&#xff0c;第一次打开弹出层可以正常写字&#xff0c;但是关闭之后再打开就不会显示绘制的线条了&#xff0c;还…

Docker(二) Docker容器

在docker中的容器都是由镜像所创建的&#xff0c;一个镜像可以创建多个容器。 一、调试Docker 启动Docker systemctl start docker 查看Docker中有哪些镜像 docker images 下载镜像 docker pull hello-world 运行镜像 docker run hello-world 出现 Hello from Docker! 这…

【方法】分卷压缩文件的密码忘记了怎么办?

压缩分卷压缩文件&#xff0c;和压缩成单个压缩文件一样&#xff0c;都是可以设置密码&#xff0c;保护文件不能被随意打开。 解压带有密码的分卷压缩文件&#xff0c;只需要解压第一个分卷文件&#xff0c;并输入原本设置的密码就可以解压全部分卷。但要是密码忘记了&#xf…

家装小程序制作丨家装行业必备媒介

在当今互联网时代&#xff0c;小程序已经成为许多企业和个人的首选&#xff0c;用于推广和销售产品或服务。对于家装行业来说&#xff0c;自有一款专属的家装小程序能够带来诸多好处。本文将探讨家装小程序制作的优点&#xff0c;并简要介绍相关的流程。 优点 提升用户体验&am…

Windows系统下安装Nginx以及相关端口问题的解决方法详解

系列文章目录 安装Tomac服务器——安装步骤以及易出现问题的解决方法 文章目录 系列文章目录 一 背景 二 安装 2.1 下载Nginx 2.2 选择Nginx版本 2.3 解压Nginx 三 Nginx的使用 3.1 Nginx基本目录 3.2查看80端口是否被占用 3.3 Nginx启动方式 第一种&#xff1a;双…