国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

數組越界那點事兒

2019-11-11 04:13:11
字體:
來源:轉載
供稿:網友

C語言中,函數在調用一個數組時,如果局部數組寫入產生了越界,則會導致函數的返回地址被覆蓋掉,從而破壞調用函數的棧幀。

而數組越界寫入就是破壞堆棧的原因有以下兩點:

1、入口參數是在棧底(內存高位)附近(函數的返回地址也在附近)

2、數組的存放是從內存低位向高位存放。所以,如果數組大小是4字節,如果越界寫入,就會向上破壞相鄰高位內存中保存的數據,可能是前面的局部變量,當越界寫入內容足夠多,就會破壞棧底保存的函數的返回地址,直接導致函數返回時發生崩潰。

例如:

#include<stdio.h>

#include<windows.h>#include<string.h>#PRagma warning(disable:4996)/*************************************局部數組越界會導致函數的返回地址被覆蓋掉,因為局部數組的存儲空間在函數的返回地址下面*****************/int main(){char buf[5];strcpy(buf, "hello Word welcome to shanxi xian everybody");/*被復制粘的字符串長度超過數組長度,則會覆蓋main函數的返回地址*/printf("%s", buf);//exit(0);程序正常退出,main函數直接返回,無需地址;system("pause");return 0;//不return就不會使用覆蓋地址}
上一篇:410. Split Array Largest Sum

下一篇:2.6小記

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 军事| 宜川县| 沐川县| 喀喇沁旗| 九龙坡区| 梁平县| 西藏| 象山县| 达孜县| 曲水县| 榆林市| 乳源| 都兰县| 施秉县| 禹州市| 砀山县| 漳浦县| 兴文县| 高邑县| 清远市| 花莲县| 襄城县| 陇川县| 永年县| 北宁市| 马龙县| 崇仁县| 上虞市| 泗水县| 封丘县| 古丈县| 兰溪市| 新巴尔虎左旗| 新源县| 合作市| 阿尔山市| 阿拉尔市| 凤山市| 罗甸县| 泸水县| 罗甸县|