码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 重生之我是一名程序员 37


    哈喽啊大家晚上好!

    今天呢给大家带来一个烧脑的知识——C语言中的栈溢出问题。那什么是栈溢出呢?栈溢出指的是当程序在执行函数调用时,为了保护函数的局部变量和返回地址,将这些数据存储在栈中。如果函数在函数调用时使用了过多的栈空间(比如递归调用函数时),栈空间可能会被耗尽,从而导致数据溢出到相邻的内存区域。

    下面我给大家举一个例子方便大家更直观的认识栈溢出,比如:

    在VS2022、X86、Debug 的环境下,编译器不做任何优化的话,下⾯代码执⾏的结果是啥?

    1. #include
    2. int main()
    3. {
    4. int i = 0;
    5. int arr[10] = {0};
    6. for(i=0; i<=12; i++)
    7. {
    8. arr[i] = 0;
    9. printf("hehe\n");
    10. }
    11. return 0;
    12. }

    相信大多数人肯定会认为结果是打印出 10个"hehe",但是结果并不止这样,而是程序死循环了

    那为何为这样呢?这就要牵扯到C语言中数据的存放问题了,下面我给大家放一张图相信大家就理解了 

    在这张图中, 栈区内存的使⽤习惯是从⾼地址向 低地址使⽤的,所以变量i的地址是 较⼤的。arr数组的地址整体是⼩ 于i的地址。

     数组在内存中的存放是:随着下标 的增⻓,地址是由低到⾼变化的。 所以根据代码,就能理解为什么是左 边的代码布局了。 如果是左边的内存布局,那随着数组 下标的增⻓,往后越界就有可能覆盖 到i,这样就可能造成死循环的。

    这⾥肯定有人有疑问:为什么i和arr 数组之间恰好空出来2个整型的空间 呢?这⾥确实是巧合,在不同的编译 器下可能中间的空出的空间⼤⼩是不 ⼀样的,代码中这些变量内存的分配 和地址分配是编译器指定的,所以的 不同的编译器之间就有差异了。所以 这个题⽬是和环境相关的。

    那么到这里相信大家就理解了C语言中的栈溢出问题了,那今天的知识分享就到此结束啦,感谢大家支持,各位明天见! 

  • 相关阅读:
    转发与重定向、四大作用域
    算术优化与阿奎拉鹰优化的混合算法
    【JDBC篇】preparedStatement功能介绍
    【深度学习 & 推荐系统 & 基础知识篇】基于内容的推荐,基于协同过滤的推荐;余弦相似度:定义、在科研中的应用。传统的推荐方法 | 校招题目:UML中的动态视图有:...
    java计算机毕业设计基于安卓/Android/微信小程序的校园外卖点餐APP
    Chinese-LLaMA-Alpaca-2模型的测评
    人生啊,到底什么时候是个头
    DASCTF X GFCTF 2022十月挑战赛--Crypto
    物理学专业英语(写作整理)04 物理中常用的空间表示
    盒子模型——内边距以及外边距以及外边距让盒子水平居中
  • 原文地址:https://blog.csdn.net/StarslxYzxcvbnm/article/details/134539740
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号