重生之我是一名程序員 37 ——C語言中的棧溢出問題

哈嘍啊大家晚上好!

今天呢給大家帶來一個燒腦的知識——C語言中的棧溢出問題。那什么是棧溢出呢?棧溢出指的是當程序在執行函數調用時,為了保護函數的局部變量和返回地址,將這些數據存儲在棧中。如果函數在函數調用時使用了過多的棧空間(比如遞歸調用函數時),棧空間可能會被耗盡,從而導致數據溢出到相鄰的內存區域。

下面我給大家舉一個例子方便大家更直觀的認識棧溢出,比如:

在VS2022、X86、Debug 的環境下,編譯器不做任何優化的話,下?代碼執?的結果是啥?

#include <stdio.h>
int main()
{int i = 0;int arr[10] = {0};for(i=0; i<=12; i++){arr[i] = 0;printf("hehe\n");}return 0;
}

相信大多數人肯定會認為結果是打印出 10個"hehe",但是結果并不止這樣,而是程序死循環了

那為何為這樣呢?這就要牽扯到C語言中數據的存放問題了,下面我給大家放一張圖相信大家就理解了?

在這張圖中, 棧區內存的使?習慣是從?地址向 低地址使?的,所以變量i的地址是 較?的。arr數組的地址整體是? 于i的地址。

?數組在內存中的存放是:隨著下標 的增?,地址是由低到?變化的。 所以根據代碼,就能理解為什么是左 邊的代碼布局了。 如果是左邊的內存布局,那隨著數組 下標的增?,往后越界就有可能覆蓋 到i,這樣就可能造成死循環的。

這?肯定有人有疑問:為什么i和arr 數組之間恰好空出來2個整型的空間 呢?這?確實是巧合,在不同的編譯 器下可能中間的空出的空間??是不 ?樣的,代碼中這些變量內存的分配 和地址分配是編譯器指定的,所以的 不同的編譯器之間就有差異了。所以 這個題?是和環境相關的。

那么到這里相信大家就理解了C語言中的棧溢出問題了,那今天的知識分享就到此結束啦,感謝大家支持,各位明天見!?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/165638.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/165638.shtml
英文地址,請注明出處:http://en.pswp.cn/news/165638.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Sentinel核心類解讀:Entry

默認情況下&#xff0c;Sentinel會將controller中的方法作為被保護資源&#xff0c;Sentinel中的資源用Entry來表示。 Sentinel中Entry可以理解為每次進入資源的一個憑證&#xff0c;如果調用SphO.entry()或者SphU.entry()能獲取Entry對象&#xff0c;代表獲取了憑證&#xff…

安卓手機便簽APP用哪個,手機上好用的便簽APP是什么

在日常生活及工作方面&#xff0c;總是有許多做不完的事情需要大家來處理&#xff0c;當多項任務堆疊交叉在一起時&#xff0c;很容易漏掉一些項目&#xff0c;這時候大家會借助經常攜帶的手機來記錄容易忘記的事情&#xff0c;如手機上的鬧鐘、定時提醒軟件都可以用來記錄待辦…

2023亞太杯數學建模A題思路分析 - 采果機器人的圖像識別技術

1 賽題 問題A 采果機器人的圖像識別技術 中國是世界上最大的蘋果生產國&#xff0c;年產量約為3500萬噸。與此同時&#xff0c;中國也是世 界上最大的蘋果出口國&#xff0c;全球每兩個蘋果中就有一個&#xff0c;全球超過六分之一的蘋果出口 自中國。中國提出了一帶一路倡議…

JDK11新特性

目錄 一、JShell 二、Dynamic Class-File Constants類文件新添的一種結構 三、局部變量類型推斷&#xff08;var ”關鍵字”&#xff09; 四、新加的一些實用API 1. 新的本機不可修改集合API 2. Stream 加強 3. String 加強 4. Optional 加強 5. 改進的文件API 五、移…

canvas

Canvas 是 Android 中用于繪制圖形的重要類&#xff0c;它提供了許多用于繪制的常用方法。以下是一些常用的 Canvas 方法&#xff1a; 繪制顏色和背景&#xff1a; drawColor(int color): 用指定顏色填充整個畫布。drawRGB(int r, int g, int b): 用 RGB 值指定顏色填充整個畫布…

進程池,線程池與跨進程數據共享爬取某岸網圖片

看教程的時候看到一個&#xff0c;生產者跟消費者的概念比較有意思&#xff0c;但是給的代碼有問題無法正常運行&#xff0c;于是我就搗鼓了一下。 基本概念就是&#xff1a; 生產者&#xff1a; 一個進程獲取網頁沒頁的圖片連接&#xff08;主進程…

Django框架之中間件

目錄 一、引入 二、Django中間件介紹 【1】什么是Django中間件 【2】Django中間件的作用 【3】示例 三、Django請求生命周期流程圖 四、Django中間件是Django的門戶 五、Django中間件詳解 六、中間件必須要掌握的兩個方法 (1) process_request (2) process_respon…

Redis集群環境各節點無法互相發現與Hash槽分配異常 CLUSTERDOWN Hash slot not served的解決方式

原創/朱季謙 在搭建Redis5.x版本的集群環境曾出現各節點無法互相發現與Hash槽分配異常 CLUSTERDOWN Hash slot not served的情況&#xff0c;故而把解決方式記錄下來。 在以下三臺虛擬機機器搭建Redis集群—— 192.168.200.160192.168.200.161192.168.200.162啟動三臺Redis集…

芯知識 | MP3語音芯片IC的優勢特征及其在現代科技應用中的價值

隨著科技的飛速發展&#xff0c;MP3語音芯片作為一種高度集成的音頻處理解決方案&#xff0c;在現代電子產品中發揮著越來越重要的作用。本文將分析MP3語音芯片的優勢特征&#xff0c;并探討其在各個領域的應用價值。 一、MP3語音芯片的優勢特征 MP3語音芯片具有多種顯著的優…

CC++輸入輸出流介紹

介紹 C中的輸入輸出流主要包括標準輸入輸出流、文件輸入輸出流和內存數據流。 標準輸入輸出流可以通過使用cin和cout進行數據的讀取和輸出文件輸入輸出流可以通過使用ifstream和ofstream對文件進行讀寫操作內存數據流可以通過使用stringstream對字符串進行讀寫操作 應用舉例…

服務器租用收費標準是什么?

服務器在企業轉型中或者是互聯網企業中起著舉足輕重的作用&#xff0c;服務器有強大的存儲能力和計算能力&#xff0c;能夠幫助企業存儲大量信息&#xff0c;完成日常工作&#xff0c;服務器租用就是通過正規的IDC服務器商家那里獲取服務器資源&#xff0c;根據企業自身需求選擇…

Python爬蟲-獲取汽車之家新車優惠價

前言 本文是該專欄的第10篇,后面會持續分享python爬蟲案例干貨,記得關注。 本文以汽車之家新車優惠價為例,獲取各車型的優惠價,示例圖如下: 地址:aHR0cHM6Ly9idXkuYXV0b2hvbWUuY29tLmNuLzAvMC8wLzQyMDAwMC80MjAxMDAvMC0wLTAtMS5odG1sI3B2YXJlYWlkPTIxMTMxOTU= 需求:獲…

OpenStack云計算平臺

目錄 一、OpenStack 1、簡介 2、硬件需求 3、網絡 二、環境搭建 1、安全 2、主機網絡 3、網絡時間協議(NTP) 4、OpenStack包 5、SQL數據庫 6、消息隊列 7、Memcached 一、OpenStack 1、簡介 官網&#xff1a;https://docs.openstack.org/2023.2/ OpenStack系統由…

Zynq-7000系列FPGA使用 Video Processing Subsystem 實現圖像縮放,提供工程源碼和技術支持

目錄 1、前言免責聲明 2、相關方案推薦FPGA圖像處理方案FPGA圖像縮放方案自己寫的HLS圖像縮放方案 3、設計思路詳解Video Processing Subsystem 介紹 4、工程代碼詳解PL 端 FPGA 邏輯設計PS 端 SDK 軟件設計 5、工程移植說明vivado版本不一致處理FPGA型號不一致處理其他注意事項…

給sprite上增加刷光動效

游戲引擎 —— cocos creator 3.52 此動效給動態修改尺寸的圖片增加一層刷光的效果&#xff0c;直接貼代碼 CCEffect %{techniques:- passes:- vert: sprite-vs:vertfrag: sprite-fs:fragdepthStencilState:depthTest: falsedepthWrite: falseblendState:targets:- blend: tr…

Charles 網絡抓包工具詳解與實戰指南

文章目錄 導讀軟件版本Charles基本原理核心功能下載及安裝界面介紹網絡包展示 常用場景介紹PC 端網絡抓包移動端網絡抓包PC 端配置手機端配置 開啟 SSL 代理PC 端和移動端 CA 證書安裝Charles 直接安裝Charles 下載 CA 文件手動安裝 常用操作請求重發請求改寫、動態改寫斷點&am…

Qt+SQLITE數據庫設計的會員卡管理系統

一、前言 本項目演示在QT中使用SQLITE數據庫存儲數據管理的過程。當前以會員卡管理系統為例,寫了一個界面,完成會員卡的注冊,添加,充值,查詢,注銷,導出顧客信息EXECL表格 等功能的實現。 演示 SQLITE數據庫的建表、增、刪、改、查等語句功能實現。 SQLite是一款輕型的…

計算機網絡——物理層相關習題(計算機專業考研全國統考歷年真題)

目錄 2012-34 原題 答案 解析 2018-34 原題 答案 解析 2009/2011-34 原題 答案 解析 2016-34 原題 答案 解析 2014-35/2017-34 原題 答案 解析 2013-34 原題 答案 解析 2015-34 原題 答案 解析 物理層的協議眾多&#xff0c;這是因為物理層…

為啥 有了錘子,看啥都是釘子?

壞處&#xff1a;有了錘子&#xff0c;看啥都是釘子&#xff0c;有何壞處&#xff1f; 事倍功半&#xff0c;甚至適得其反。比如具有高并發設計經驗的人&#xff0c;在初創系統初期&#xff0c;就設計高并發架構&#xff0c;其復雜度大概率無法支持試點業務快速落地&#xff0…

【DevOps】Git 圖文詳解(九):工作中的 Git 實踐

本系列包含&#xff1a; Git 圖文詳解&#xff08;一&#xff09;&#xff1a;簡介及基礎概念Git 圖文詳解&#xff08;二&#xff09;&#xff1a;Git 安裝及配置Git 圖文詳解&#xff08;三&#xff09;&#xff1a;常用的 Git GUIGit 圖文詳解&#xff08;四&#xff09;&a…