当前位置: 首页 > article >正文

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

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

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

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

这种行为当然后果难料。

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

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

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

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

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

1.数组越界

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

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

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

2.野指针

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

3.栈溢出

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

4.堆损坏

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

5.类型错误

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

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


http://www.kler.cn/a/402947.html

相关文章:

  • 网络爬虫——常见问题与调试技巧
  • ACP科普:约翰·科特变更
  • 【深度学习之回归预测篇】 深度极限学习机DELM多特征回归拟合预测(Matlab源代码)
  • 实习冲刺第二十九天
  • Specification封装一个类实现链式调用
  • Cmakelist.txt之win-c-udp-client
  • 手机ip地址异常怎么解决
  • tcn 对比 cnn-attension-gru联合模型,时间序列预测,深度神经网络
  • C# 数据结构之【链表】C#链表
  • PN、VFC、PNC局部网络管理
  • django西西家居全屋定制系统的设计与实现
  • Conda环境Git Pull报错
  • Nmap识别MongoDB 6.0指纹
  • Node.js windows版本 下载和安装(详细步骤)
  • C++:探索AVL树旋转的奥秘
  • RBTree--红黑树
  • MySQL 架构概览
  • 开源一个练手的项目,就叫新闻助手吧
  • vue中动态渲染静态图片资源
  • 如何用GPT-4o解读视频
  • 线性回归Tensorflow实现
  • net某高校社交学习平台的设计与实现
  • 多传感器融合感知算法-后融合
  • 【Linux】开发工具(yum)
  • Uniapp运行环境判断和解决跨端兼容性详解
  • Android开发实战班 - Android开发基础之 Kotlin语言基础与特性