C语言内存:我家大门常打开

embedded/2024/11/21 11:56:05/

C语言本着自由开放的理念,并不禁止程序访问非法内存

什么是非法内存?就是那本不是你家的地,你却硬跑过去种庄稼。

或者,你在澡堂子里拿着自己的钥匙去捅别人的柜。

这种行为当然后果难料。

可能你捅了半天,火花冒出三丈多高,硬是捅不开。

也许正干得起劲,冷不防一个大汉把你揪出来不由分说对你施展一通“面目全非脚”。

也有可能你的运气非常好,一下子就打开了,然后惊获稀世之宝:一条金丝眼镜……蛇。

官方最新公告,非法内存访问可能会导致程序崩溃、数据损坏或安全漏洞,请广大市民注意。

C语言中常见的非法内存访问形式如下:

1.数组越界

最常见的非法内存访问就是数组越界。数组越界指访问数组元素时下标超出了数组的有效范围。比如你定义了一个含有10个元素的数组为a[10],你却硬要去访问a[9527],或者你不听劝阻地要去访问a[-2]家串门。

老弟呀,手伸得太长可是要付出代价的!

你可能会辩解说哥才没这么傻,但当你使用循环遍历数组时就会发现这不是杞人忧天了,多迈一两脚是常有的事。

2.野指针

这也是非常典型的问题。咱们之前讲过,野指针是指未初始化或已释放的指针。未初始化的指针就像失灵的指南针,可能指向任意位置,包括受保护的内存区域或未分配的内存。已释放的指针所指向的内存可能被存入任何东西,就像从垃圾箱里翻出的塑料袋,里面指不定会有什么惊喜。据大人们说,使用野指针可能会导致程序崩溃或数据损坏,因此小孩子千万不要尝试。

3.栈溢出

过度使用栈内存(例如,在函数中声明过大的局部数组)可能导致栈溢出,从而覆盖栈上的其他数据,包括返回地址和函数参数。就像是你吃自助餐时吃得太撑,一不小心把人家店里的桌子拱翻了。

4.堆损坏

不正确地管理堆内存(例如,使用malloc()分配内存后忘记free(),或者对malloc()返回的指针进行错误的算术运算)可能导致堆损坏。

5.类型错误

将指针类型错误地转换为其他类型,并尝试通过该指针访问内存。这可能导致对齐问题或访问权限错误。

上面这些好像不太响应群众路线,其实非法内存访问就在我们身边,比如游戏的外挂就是典型的非法内存访问,它专门访问、修改人家游戏程序里的数据。


http://www.ppmy.cn/embedded/139328.html

相关文章

【Maven】nexus 配置私有仓库配置【转】

介绍:【Maven】Nexus几个仓库的介绍-CSDN博客 一、仓库类型 proxy 远程仓库的代理,比如说nexus配置了一个central repository的proxy,当用户向这个proxy请求一个artifact的时候,会现在本地查找,如果找不到,则会从远程…

持续集成与持续部署:CI/CD实现教程

以下是一个基于常见工具实现 CI/CD 的基本教程示例,这里以 Git、Jenkins、Maven(用于 Java 项目构建和管理依赖,其他语言项目可替换为对应构建工具)以及 Docker(用于容器化部署,非必需但很常用)…

Apache Paimon】-- 6 -- 清理过期数据

目录 1、简要介绍 2、操作方式和步骤 2.1、调整快照文件过期时间 2.2、设置分区过期时间 2.2.1、举例1 2.2.2、举例2 2.3、清理废弃文件 3、参考 1、简要介绍 清理 paimon (表)过期数据可以释放存储空间,优化资源利用并提升系统运行效…

八、无刷电机电压电流温度采集

1、三相电流采样 上图为 U 相电流采集电路(U、V、W 三相同理,这里只以 U 相为例),其中R17 为采样电阻(20mR),当有电流 I 流过采样电阻时,采样电阻上就会产生一个电压,电压…

人工智能与SEO优化中的关键词策略解析

内容概要 在当今数字化快速发展的时代,人工智能(AI)与搜索引擎优化(SEO)的结合正变得愈发重要。关键词策略是SEO优化的一项基础工作,它直接影响到网站的可见性和流量。通过运用智能算法,企业能…

关联度分析、灰色预测GM(1,1)、GM(1,1)残差模型——基于Python实现

关联度分析 import numpy as np import pandas as pd #关联度分析 #参考序列 Y_0[170,174,197,216.4,235.8] #被比较序列 Y_1[195.4,189.9,187.2,205,222.7] Y_2[308,310,295,346,367]#初始化序列 X_0np.array(Y_0)/Y_0[0] X_1np.array(Y_1)/Y_1[0] X_2np.array(Y_2)/Y_2[0]#计…

基于Java Springboot旅游民宿信息管理系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 数据…

掌握Git分布式版本控制工具:从基础到实践

一、引言 在软件开发过程中,版本控制是不可或缺的一环。Git作为一种分布式版本控制工具,以其高效、灵活的特点,受到了广大开发者的青睐。本文将详细介绍Git的基本概念、工作流程、常用命令,以及在IntelliJ IDEA中的操作方法。 二、…