当前位置:首页 > 单片机 > CPP开发者
[导读]有一定C开发经验的同学大多数踩过内存破坏的坑,有这么几种现象:比如某个变量整形,在程序中只可能初始化或者赋值为1或者2,但是在使用的时候却发现其为0或者其他的情况。对于其他类型,比如字符串等,可能出现了一种出乎意料的值!程序在堆上申请内存或者释放内存的时候,在内存充足的情况下,居...

有一定C 开发经验的同学大多数踩过内存破坏的坑,有这么几种现象:

  1. 比如某个变量整形,在程序中只可能初始化或者赋值为1或者2, 但是在使用的时候却发现其为0或者其他的情况。对于其他类型,比如字符串等,可能出现了一种出乎意料的值!

  2. 程序在堆上申请内存或者释放内存的时候,在内存充足的情况下,居然出现了堆错误。

当出现以上场景的时候,你该思考一下,是不是出现了内存破坏的情况了。而本文主要通过展示和分析常见的三种内存破坏导致覆盖相邻变量的场景,让读者在碰到类似的场景,不至于束手无策。而对于堆上的内存破坏,很常见并且棘手的场景,本人将在后续的文章和大家分享。

1. 内存破坏之强制类型转换

大家都知道不匹配的类型强制转换会带来一些bug,比如intunsigned int互相转换,又或者int__int64强行转换。是不是每次当读起这类文章起来如雷贯耳,但是当自己去写代码的时候还是容易犯错?这也就是为什么C 容易写出的原因,明知可能有错,还难以避免。这往往是因为真实的项目中复杂程度,往往让人容易忽略这些细节。

不少老的工程代码还是采用VC6编译,为了安全问题或者使用C 新特性需要将VC6升级到更新的Visual Studio。接下来要介绍的一个样例程序,就是隐藏于代码中的一个问题,如果从VC6升级到VS2017的时候会带来问题吗?可以先找找看:

#include 
#include 

class DemoClass
{

public:
  DemoClass() : m_bInit(true), m_tRecordTime(0)
  { 
    time((time_t *)(
本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

在系列底层技术文章中,我们先后深入探讨过系统调用实现原理、GDB调试底层逻辑、Linux最大并发数等核心系统主题,而内存交换机制是Linux虚拟内存体系中最容易被普通开发者忽略,却直接决定系统在高内存压力下稳定性的核心机...

关键字: Linux内存 内存

在C语言的标准库中,原生字符串始终以'\0'作为结束标记,这种以字符数组为基础的实现方式存在天生的局限性:开发者很难在运行时动态调整字符串的长度,一旦超出预先分配的固定数组大小,就会触发缓冲区溢出的安全风险。在实际开发中...

关键字: 字符串 内存

很多节点上线头几天一切正常,跑到一两个月后才开始变慢、重启或误报内存不足。边缘计算里的内存风险,常见的不是一次性爆掉,而是碎片和小泄漏长时间叠加后把系统推到边界。

关键字: 边缘计算 内存 碎片

2026年的PC市场,正经历着一场从硬件到软件的全面涨价潮。

关键字: PC 内存 微软 Windows

加利福尼亚州圣何塞2026年8月7日 /美通社/ -- 美国硅谷当地时间8月5日,FMS 2026期间,江波龙首席科学家陈健博士发表《Intelligence at the Edge: Powered by the St...

关键字: FOUNDRY FM AI 内存

“2031年之前中国别想翻盘!”韩国媒体近日借一份市场报告,向全球发出充满火药味的宣示

关键字: 内存 存储 存储芯片

横琴2026年7月31日 /美通社/ -- 澜起科技今日宣布,率先在业界试产CXL® 3.2内存扩展控制器(MXC)芯片。该产品面向人工智能、云计算、数据中心等场景的内存扩展与资源池化需求,旨在通过CXL技术助力...

关键字: 内存 控制器 MX DDR

全新 MRCD 与 MDB 设计提供 12800 MT/s 高速,注入强劲 AI 算力动能 深圳2026年7月30日 /美通社/ -- 全球工业存储及嵌入式外设领导品牌宜鼎国际(Innodi...

关键字: DDR 内存 带宽 AI

内存泄露是C/C++等手动内存管理语言开发中最常见也最头疼的问题之一:程序运行时间越长,占用内存越来越多,最终会把系统内存耗尽,导致程序崩溃或者系统卡死,甚至影响服务器上其他服务的正常运行。很多开发者遇到内存泄露问题,往...

关键字: 内存泄露 内存

虚拟内存是现代操作系统最核心的设计之一,它彻底改变了程序对物理内存的访问方式,让每个进程都拥有了独立、连续的超大地址空间,既实现了进程间的内存隔离,也解决了物理内存容量不足的问题。Linux作为目前应用最广泛的服务器操作...

关键字: 内存 虚拟内存
关闭