3. C++ 常见的段错误及对策
常见的 C/C++ 段错误及对策
一、指针没有指向一块合法的内存
定义了指针变量,但是没有为指针分配内存,即指针没有指向一块合法的内存。这里举几个比较隐蔽的例子。
- 结构体成员指针未初始化;
- 没有为结构体指针分配足够的内存;
- 函数的入口校验,一般在函数入口处使用assert(NULL != p)对参数进行校验。assert 是一个宏,而不是函数;
三、内存分配成功,但并未初始化
memset(a,0,sizeof(a));
memset 函数有三个参数,第一个是要被设置的内存起始地址;第二个参数是要被设置的值;第三个参数是要被设置的内存大小。
至于指针变量如果未被初始化,会导致if 语句或assert 宏校验失败。
四、内存越界
内存分配成功,且已经初始化,但是操作越过了内存的边界。这种错误经常是由于操作数组或指针时出现“多1”或“少1”。比如:
int a[10] = {0};
for (i=0; i<=10; i++)
{a[i] = i;
}
所以,for 循环的循环变量一定要使用半开半闭的区间,而且如果不是特殊情况,循环变量尽量从0 开始。
五、内存泄漏
用malloc 函数申请0 字节内存
另外还有一个问题:用malloc 函数申请0 字节内存会返回NULL 指针吗?
可以测试一下,也可以去查找关于malloc 函数的说明文档。申请0 字节内存,函数并不返回NULL,而是返回一个正常的内存地址。但是你却无法使用这块大小为0 的内存。这好尺子上的某个刻度,刻度本身并没有长度,只有某两个刻度一起才能量出长度。对于这一点一定要小心,因为这时候if(NULL != p)语句校验将不起作用。
内存释放
malloc 两次只free 一次会内存泄漏;malloc 一次free 两次肯定会出错。也就是说,在程序中malloc 的使用次数一定要和free 相等,否则必有错误。这种错误主要发生在循环使用malloc 函数时,往往把malloc 和free 次数弄错了。这里留个 练习:
内存释放之后
释放完块内存之后,没有把指针置NULL,这个指针就成为了“野指针”,也有书叫“悬垂指针”。这是很危险的,而且也是经常出错的地方。所以一定要记住一条:free 完之后,一定要给指针置NULL。
六、内存已经被释放了,但是继续通过指针来使用
这里一般有三种情况:
第一种:就是上面所说的,free(p)之后,继续通过p 指针来访问内存。解决的办法就是给p 置NULL。
第二种:函数返回栈内存。这是初学者最容易犯的错误。比如在函数内部定义了一个数组,却用return 语句返回指向该数组的指针。解决的办法就是弄明白栈上变量的生命周期。
相关文章:
3. C++ 常见的段错误及对策
常见的 C/C 段错误及对策 一、指针没有指向一块合法的内存 定义了指针变量,但是没有为指针分配内存,即指针没有指向一块合法的内存。这里举几个比较隐蔽的例子。 结构体成员指针未初始化;没有为结构体指针分配足够的内存;函数的…...
推荐的Kubernetes 学习资料
官方文档: Kubernetes 官方文档:https://kubernetes.io/docs/Kubernetes 教程:https://kubernetes.io/docs/tutorials/ 书籍: Kubernetes in Action,Marko Luksa 著Kubernetes Up and Running,Kelsey Hi…...
MySQL之索引与事务
一 索引的概念 一种帮助系统查找信息的数据 数据库索引 是一个排序的列表,存储着索引值和这个值所对应的物理地址无须对整个表进行扫描,通过物理地 址就可以找到所需数据是表中一列或者若干列值排序的方法 需要额外的磁盘空间 索引的作用 1 数据库…...
Linux的基本使用
1.Linux的背景 1.1什么Linux Linux是⼀个操作系统.和Windows是"并列"的关系. 1.2Linux系统的优势 1. 开源(意味着免费,便宜) 2. 稳定(Linux可以运⾏很多年,都不会发⽣重⼤问题) 3. 安全(Linux只有管理员或者特定⽤⼾才能访问Linux内核) 4. ⾃由(不会被强加商业产品和…...
亚信安慧AntDB全景观察:数据库领域的创新者
随着大数据时代的到来,对数据库的需求愈发强烈。在这一背景下,国产数据库逐渐崭露头角,亚信安慧AntDB作为重要的代表产品之一正积极参与到激烈的市场竞争中。亚信安慧AntDB不仅追求技术的革新和突破,同时也致力于满足用户日益增长…...
Linux 系统是如何收发⽹络包的
Linux 系统是如何收发⽹络包的? ⽹络模型 为了使得多种设备能通过⽹络相互通信,和为了解决各种不同设备在⽹络互联中的兼容性问题,国际标准化组织制定了开放式系统互联通信参考模型(Open System Interconnection Reference Mode…...
飞跃前端瓶颈:技术进阶指南精华篇
引言: 在互联网的快车道上,前端技术日新月异。对于前端工程师而言,技术水平达到一定高度后,往往会遭遇成长的天花板。本文将探讨如何识别并突破这些技术瓶颈,分享实用的进阶策略和实践案例。 一、技术等级概览…...
Jenkins安装 Linux 更换镜像 安装插件
Jenkins安装 Linux 更换镜像 安装插件 前言 下面叙述了三种jenkins安装的方式,jenkins安装之前必须有java环境因为他是java写的… yum安装只能安装最新版本的jenkins,但是jenkins是java写的所以他强依赖java版本,当你的服务器的java版本与jenkins版本冲突时还需要给jenkins重…...
(一)基于IDEA的JAVA基础1
Java是一门面向对象的编程语言,不仅吸收了C语言的各种优点,还摒弃了C里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论࿰…...
FPGA开源项目分享——基于FPGA加速的热扩散模拟器
导语 今天继续分享康奈尔大学FPGA课程ECE 5760的典型案例——基于FPGA加速的热扩散模拟器。 (更多其他案例请参考网站: Final Projects ECE 5760) 1. 项目概述 项目网址 https://people.ece.cornell.edu/land/courses/ece5760/FinalProje…...
【ARM 嵌入式 C 入门及渐进 12 --寄存器位清0和置位函数实现】
文章目录 寄存器位清0和置位函数实现示例使用方式注意事项 寄存器位清0和置位函数实现 在 C 语言中,可以使用宏定义来创建用于清除(清零)或设置(置一)32位地址中特定位的函数。以下是两个宏定义的示例: #…...
Java实现10万,并发去重,优雅地处理重复请求!
对于一些用户请求,在某些情况下是可能重复发送的,如果是查询类操作并无大碍,但其中有些是涉及写入操作的,一旦重复了,可能会导致很严重的后果,例如交易的接口如果重复请求可能会重复下单。 重复的场景有可…...
《深入解析 C#》—— C# 3 部分
文章目录 第三章 C#3:LINQ及相关特性3.1 自动实现属性(*)3.2 隐式类型 var(*)3.3 对象和集合初始化3.3.1 对象初始化器3.3.2 集合初始化器 3.4 匿名类型3.4.1 基本语法和行为3.4.2 编译器生成类型3.4.3 匿名类型的局限…...
Redis 的5种数据类型的基本命令
目录 String的基本命令 1. SET 2. GET 3. GETSET 4. STRLEN 5. APPEND 6. SETRANGE 7. GETRANGE 8. SETEX 9. SETNX 10. MSET 11. MGET 12. INCR 13. DECR 14. INCRBY 15. DECRBY 16. INCRBYFLOAT Map的基本命令 1. HSET 2. HGET 3. HMSET 4. HMGET 5. …...
【Liunx-后端开发软件安装】Liunx安装nginx
【Liunx-后端开发软件安装】Liunx安装nginx 使用安装包安装 一、简介 nginx,这个家伙可不是你厨房里的那位大厨,它可是互联网世界的“煎饼果子摊主”。想象一下,在熙熙攘攘的网络大街上,nginx挥舞着它的锅铲——哦不,是…...
力扣Lc20--- 202.快乐数(java版)-2024年3月20日
1.题目 2.知识点 (1)while (seen.contains(n) false) { // 循环体 } 与 !seen.contains(n) 等同 (2) 当传入数字 19 给 isHappy(19) 方法时,下面是每一行代码的执行过程: 初始化一个空的 HashSet&#…...
机器学习----交叉熵(Cross Entropy)如何做损失函数
目录 一.概念引入 1.损失函数 2.均值平方差损失函数 3.交叉熵损失函数 3.1信息量 3.2信息熵 3.3相对熵 二.交叉熵损失函数的原理及推导过程 表达式 二分类 联立 取对数 补充 三.交叉熵函数的代码实现 一.概念引入 1.损失函数 损失函数是指一种将一个事件&#x…...
Linux docker3--数据卷-nginx配置示例
一、因为docker部署服务都是以最小的代价部署,所以通常在容器内部很多依赖和命令无法执行。进入容器修改配置的操作也比较麻烦。本例介绍的数据卷作用就是将容器内的配置和宿主机文件打通,之后修改宿主机的配置文件就相当于修改了docker进程的配置文件&a…...
力扣454. 四数相加 II
思路:把四个数组拆成两对,两个分别相加,记录第一对的相加结果进map里,再把第二对数组 0-nums2-nums4 去map里面找出现了几次,这题不用对重复的四元组去重,所以出现多次都有效。 class Solution {public int…...
vulnstack1 渗透分析 红日靶场(一)
环境搭建 ip段设置 kali (coleak):192.168.145.139 Windows 7 (stu1):192.168.10.181、192.168.145.140 Winserver 2008 (owa):192.168.10.180 Win2k3 (root-tvi862ubeh):192.168.10.182复制 kali可以访问win7,但不能…...
深圳实体门店有必要做GEO AI代运营吗
深圳实体门店有必要做GEO AI代运营吗一、开篇引言2026年深圳本地实体商业竞争进入白热化阶段,全城数百万家线下实体门店涵盖本地生活、家装工装、汽车服务、餐饮娱乐、教育培训等全品类,传统线下地推、门店自然客流、传统团购平台引流效果持续下滑&#…...
BLE蓝牙扫描深度剖析:扫描原理、核心参数、前后台差异
一、前言BLE设备交互分为两大角色:广播端(外设Peripheral)与扫描端(中心Central)。上一篇博客详解了四大广播模式,本文聚焦配套核心能力——BLE扫描机制。绝大多数蓝牙开发疑难问题:前台能扫后台…...
开发转兼职DBA(二):执行计划教我做事
开发转兼职DBA(二):执行计划教我做事 查询慢了不知道为什么,加了索引还是慢,复合索引怎么建,执行计划怎么看——这些不是DBA的专利,是每个写SQL的开发者迟早要面对的事。 文章目录 开发转兼职DB…...
WarcraftHelper:魔兽争霸III现代兼容性问题的终极解决方案指南
WarcraftHelper:魔兽争霸III现代兼容性问题的终极解决方案指南 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 魔兽争霸III作为经典即时战…...
保姆级避坑指南:在Ubuntu 22.04上搞定ROS2 Humble、PX4与Gazebo的联合仿真(附Empy版本降级)
保姆级避坑指南:Ubuntu 22.04下ROS2 Humble与PX4联合仿真的21个关键陷阱当你在Ubuntu 22.04上第一次尝试搭建ROS2 Humble、PX4与Gazebo的联合仿真环境时,可能会遇到比预期更多的挑战。这不是一个简单的"复制粘贴命令就能完成"的任务——版本冲…...
什么情况下会核销贷款
贷款核销的核心前提是:贷款被认定为 “损失类” 且经 “穷尽追偿” 仍无法收回,银行按监管与会计规则从账面冲销,但债权不消灭、仍可追偿。一、核心认定条件(满足其一即可)破产 / 注销 / 吊销:借款人和担保…...
应对Claude Code访问不稳定,快速切换至Taotoken的应急方案
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 应对Claude Code访问不稳定,快速切换至Taotoken的应急方案 对于依赖Claude Code进行日常开发或自动化任务的用户来说&a…...
LDBlockShow实战指南:基因组连锁不平衡分析与可视化解决方案
LDBlockShow实战指南:基因组连锁不平衡分析与可视化解决方案 【免费下载链接】LDBlockShow LDBlockShow: a fast and convenient tool for visualizing linkage disequilibrium and haplotype blocks based on VCF files 项目地址: https://gitcode.com/gh_mirror…...
告别依赖冲突:在Debian12上为特定项目搭建Python2.7.18独立运行环境
告别依赖冲突:在Debian12上为特定项目搭建Python2.7.18独立运行环境 当现代Linux系统已全面拥抱Python3的时代,突然需要维护一个仅支持Python2.7的遗留项目,这种场景对开发者而言无异于一场噩梦。本文将带你用工程化的思维,在Deb…...
BetterNCM安装器终极指南:5分钟解锁网易云音乐无限潜能
BetterNCM安装器终极指南:5分钟解锁网易云音乐无限潜能 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 你是否觉得网易云音乐PC版功能有限,界面单调?…...
