C++编译一些常见的错误集锦

1、段错误(Segmentation Fault)

(1)段错误(Segmentation Fault)是一种常见的计算机程序错误,通常指向程序试图访问的内存地址超出了程序可访问的内存范围,或者指针指向了无效的内存地址。

(2)这种错误通常会导致程序崩溃或异常终止。段错误通常是由于程序编写错误、内存泄漏、内存损坏或操作系统等原因引起的。

2、强异常保证(strong exception guarantee)

(1)强异常保证:是指在一个函数出现异常时,程序状态不会发生任何改变,即不会造成任何资源泄漏或数据不一致的情况。如果一个函数提供了强异常保证,那么在调用该函数时,如果出现了异常,程序会回滚到函数调用前的状态,就好像函数从未被调用过一样。

(2)强异常保证通常需要使用一些技术手段来实现,例如使用 RAII(资源获取即初始化)技术来管理资源,或使用事务机制来确保数据的一致性。强异常保证可以提高程序的健壮性和可靠性,因为它可以确保程序在出现异常时不会发生任何不可预料的行为。

(3)强异常保证如何实现:

强异常保证是指在发生异常时,不会改变程序状态,即要么操作成功,要么操作失败但不影响程序状态。实现强异常保证的一般步骤如下:

  1. 在操作前,备份或复制必要的数据结构,以便在操作失败时恢复状态。
  2. 在操作过程中,使用异常处理机制捕获异常并回滚操作,同时保留备份或复制的数据结构不变。
  3. 如果操作成功,删除备份或复制的数据结构。

以下是一个示例,使用强异常保证实现一个简单的文件复制程序:

#include <iostream>
#include <fstream>void copyFile(const std::string& src, const std::string& dst)
{std::ifstream in(src.c_str(), std::ios::binary);std::ofstream out(dst.c_str(), std::ios::binary);if (!in || !out)throw std::runtime_error("Failed to open file!");// 备份或复制必要的数据结构std::ifstream in_backup(in.rdbuf());std::ofstream out_backup(out.rdbuf());try {char buf[1024];while (in.read(buf, sizeof(buf)))out.write(buf, sizeof(buf));out.write(buf, in.gcount());}catch (...) {// 操作失败时回滚操作,保留备份或复制的数据结构不变in_backup.seekg(0, std::ios::beg);out_backup.seekp(0, std::ios::beg);out_backup << in_backup.rdbuf();throw;}// 操作成功,删除备份或复制的数据结构in_backup.close();out_backup.close();
}int main()
{try {copyFile("src.txt", "dst.txt");}catch (const std::exception& e) {std::cerr << e.what() << std::endl;return 1;}return 0;
}

在这个示例中,文件复制操作使用了强异常保证。在操作前,备份了输入流和输出流的数据结构;在操作过程中,使用异常处理机制捕获异常,并回滚操作,同时保留备份或复制的数据结构不变;如果操作成功,删除备份或复制的数据结构。这样,即使发生异常,也不会改变程序状态。

3、有效但未定义的状态(valid but unspecified state)

C++在其文档中表明,所有标准库中的对象,当被移动之后,会处于一个"有效但未定义的状态。

C++并没有强制的规定限制被移动对象必须处于什么状态,并且当类型需要满足不同用途时它的要求也不一致(例如用于key的类型要求被移动对象仍然能够进行排序),因此我们在实现自己的类型时需要根据具体情况来分析。但通常来说,我们应该尽可能的贴近C++标准库中的类型规范。但不管如何,以下这一点是我们必须考虑的:保证被移动对象能够被正确的析构。

为什么必须保证这一点呢?这是因为被移动对象只是处于一个特殊的状态,对于运行时来说,仍然是有效的,最终也会执行析构函数进行销毁。

例如在之前我们的MyClass类型定义中,当我们执行移动语义后,被移动对象的name指针会被置空。当执行析构函数时,我们就可以简单的通过判空来避免指针的无效释放,这就确保了被移动对象能够正确的析构:

MyClass(){if (nullptr != name)  // 通过判空来避免指针的无效释放{delete[] name;name = nullptr;}}

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

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

相关文章

分布式光伏发电远程监控系统

分布式光伏发电远程监控系统 项目背景 新能源、可再生能源接入电网是智能电网建设的重要组成&#xff0c;也是能源互联网发展的基础。近年来&#xff0c;太阳能光伏发电技术快速发展&#xff0c;光伏发电并网对配电网的影响也不断加深。电网调度人员需要人工参与光伏发电站的发…

短视频矩阵源码技术开发

短视频矩阵是一种常见的视频编码标准&#xff0c;它通过将视频分成多个小块并对每个小块进行压缩来实现高效的视频传输。在本文中&#xff0c;我们将介绍短视频矩阵的原理和实现&#xff0c;并提供示例代码。 $where_time array(); // 时间 $where_time[] array(name>fbr…

运用正则表达式匹配QQ邮箱

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1.首先创建一个新文件夹 1.命名好名字后用Visual Studio Code打开 创建一个HTML文档用&#xff01;字符按下tab键后完成基本格式 创建一个input标签占位符写下请输入QQ邮箱再给他一个id方便调用 …

html5form表单提交到QQ邮箱,javaMai+Springl实现给QQ邮箱发邮件(带附件,html格式)...

以前的时候想着java发邮件很简单,因为当时使用的是outlook实现的,有兴趣的可以去看看之前的两篇博客文章,1.使用java底层实现邮件的发送(含测试,源码) 和 2.使用Spring实现邮件的发送(含测试,注释,源码) 就在今天,遇到的需求是给一个QQ邮箱发一份邮件,刚看到需求一看…

Linux向qq邮箱发送html表格以及遇到的问题

由于是实验&#xff0c;做的比较简陋&#xff0c;邮箱直接显示html界面&#xff0c;有诸多要求&#xff0c;本人对html不太擅长&#xff0c;详情可以参考http://www.ruanyifeng.com/blog/2013/06/html_email.html linux向qq发送邮件参考另一篇博客&#xff1a; https://blog.cs…

PGP加密解密QQ邮箱邮件

今天学习了PGP加密解密QQ邮箱邮件的方法&#xff0c;分享一下&#x1f601;&#x1f601;&#x1f601;&#x1f601; 涉及软件&#xff1a;PGP(PGP Desktop)、Outlook(office的) 加密&#xff1a; 第一步&#xff1a;安装PGP软件&#x1f602;&#x1f602;&#x1f602; 具体…

qq邮箱发html版式是乱的,为什么在Word里编辑的内容到QQ邮箱里发给别人是乱的,我用附件发的呀...

为什么在Word里编辑的内容到QQ邮箱里发给别人是乱的,我用附件发的呀以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 为什么在Word里编辑的内容到QQ邮箱里发给别人是乱的,我用附件发的呀, 为什么在Word里编辑好的…

ipad查看qq邮箱收件服务器,ipad怎么设置qq邮箱以便通过iPad来接收QQ邮箱收到的邮件...

大家可以通过下文来了解&#xff0c;小编将会演示ipad怎么设置qq邮箱&#xff0c;设置成功之后我们就能通过iPad来接收QQ邮箱收到的邮件&#xff0c;快来操作吧~ 下文是以iPhone设置QQ邮箱为例&#xff0c;和iPad步骤是一样的哦&#xff0c;首先进入“Mail”&#xff0c;点击“…

SpringCloud Gateway网关多路由配置访问404解决方案

文章目录 一、问题描述&#xff1a;SpringCloud GateWay Eureka访问出现404&#xff0c;Not Found二、解决方案:1、 配置 filters: - StripPrefix12、删除冲突依赖3、检查启动类4、检查配置文件 一、问题描述&#xff1a;SpringCloud GateWay Eureka访问出现404&#xff0c…

这才叫软件测试工程师,你那最多是混口饭吃罢了....

前些天和大学室友小聚了一下&#xff0c;喝酒喝大发了&#xff0c;谈天谈地谈人生理想&#xff0c;也谈到了我们各自的发展&#xff0c;感触颇多。曾经找工作我迷茫过、徘徊不&#xff0c;毕业那会我屡屡面试失败&#xff0c;处处碰壁&#xff1b;工作两年后我一度想要升职加薪…

QQ截图快捷键设置

1、打开qq找到主菜单找到设置 2、找到热键----------点击设置热键 3、双击捕捉屏幕进行设置快捷键 然后就OK了。

C#高仿腾讯QQ截图程序

最近把以前制作的截图程序重新写了一下 动了一个大手术 高质量仿照的TX的截图程序 源码下载1(2012-12-09) http://download.csdn.net/detail/crystal_lz/4863320 源码下载2(2012-12-15) http://download.csdn.net/download/crystal_lz/4889763 新改版见&#xff1a;http:/…

【2022-10-19】让Mac QQ自带截图软件单独运行 / 节省大量系统内存 / 快捷截图 / ScreenCapture QQ/ QQ jietu plugin

相信用过Window QQ自带的截图工具的朋友&#xff0c;都会说一句&#xff1a;”真TM好用&#xff01;“&#xff0c;同样Mac QQ也自带了这样一款截图工具&#xff0c;但肯定没Window下这么好用&#xff0c;但是在Mac上应该也是数一数二的&#xff0c;我看了下界面&#xff0c;跟…

QQ截图工具截取

邮箱截图插件 TXGYMailCamera.dll(X86) Export: CameraWindow CameraSubArea CameraWindowLikeSpy 调用参数&#xff1a; rundll32 TXGYMailCamera.dll CameraWindow 微信截图插件 PrScrn.dll(X86) Export: PrScrn 调用参数&#xff1a; rundll32 PrScrn.dll PrScrn 下载地址&…

QQ自带截图功能(你想不到的强大, 必看,长截图/翻译/文本识别/钉在桌面/录屏)

本文是众多使用技巧中其中的一篇, 全部使用技巧点击链接查看, 保证你收获满满 我主页中的思维导图中内容大多从我的笔记中整理而来,相应技巧可在笔记中查找原题, 有兴趣的可以去 我的主页 了解更多计算机学科的精品思维导图整理 本文可以转载&#xff0c;但请注明来处&#x…

c盘清理软件:清理垃圾、扩大c盘和系统迁移

一、为什么要c盘清理软件 Windows系统采用了NTFS文件系统&#xff0c;这种文件系统特点是有文件碎片和系统产生的临时文件会大量存储到系统盘上&#xff0c;而且在使用电脑的过程中&#xff0c;由于程序的安装、升级、卸载和其他操作会产生大量无用的垃圾文件&#xff0c;这些…

经典好用的软件,不容错过,建议收藏

一、火绒安全软件 之前连这个良心杀毒安全软件都不知道。成立于2011年&#xff0c;一直很低调&#xff0c;很多人都不知道&#xff0c;但真的是良心软件。具有杀毒、防火墙、主动防御三大功能。干净、轻便且功能厉害。同时还有家长模式&#xff0c;控制上网时间、网站、软件等…

算法的深层次知识是数学,这些常用的互联网经典算法应用案例,你知道几个?

前言 在文章初始&#xff0c;我们来思考一个很有意思的问题&#xff1a;一滴水从很高很高的空中自由落体下来&#xff0c;会不会砸伤人&#xff1f; 能够砸伤人则需要水滴具有的动能&#xff0c;即公式&#xff08;1/2&#xff09;mv^2&#xff0c;而水滴的质量是一定的&#…

JS和H5做一个音乐播放器,附带源码

http://mp.weixin.qq.com/s/KpXT9X46AMlUVXQvpHuXGQ 效果图&#xff1a; 实现的功能 1、首页 2、底部播放控件 3、播放页面 4、播放列表 5、排行榜 6、音乐搜索 输入搜索关键词&#xff0c;点击放大镜图标 7、侧边栏 目录结构 开发心得与总结 1、轮播图 首先感谢作者ShanaMaid/…

Video Editor MovieMator Pro for Mac(视频编辑大师专业版)

Video Editor MovieMator Pro Mac版是一款功能齐全的Mac视频编辑器&#xff0c;可在几分钟内创建专业品质的视频。它提供了基本的编辑功能&#xff0c;如修剪&#xff0c;裁剪&#xff0c;分割&#xff0c;旋转等。此外&#xff0c;作为Mac视频编辑器&#xff0c; MovieMator P…