在底層來看陣列訪問越界!

2021-09-23 22:19:08 字數 946 閱讀 7198

1.什麼是陣列訪問越界

如果定義了乙個有n個元素的陣列,那麼,對這n個元素(下標為0 到 n-1的元素)的訪問都合法,而對這n個元素之外的空間進行訪問,就是非法的,稱為「越界「。又在定義陣列時,陣列占用的位址空間是連續的,通過指定陣列下標來訪問這塊記憶體裡的不同位置,當我們粗心大意,將下標取得大於等於陣列的元素個數,就會訪問到其它位址空間。

但是大多數編譯器都不會指出你的陣列訪問越界了,你的**會順利的通過編譯。陣列儲存區可看成是乙個緩衝區,超越陣列儲存區範圍的寫入操作稱為緩衝區溢位

緩衝區溢位是一種非常普遍、非常危險的漏洞,在各種作業系統、應用軟體中廣泛存在。

如歷史上的莫里斯蠕蟲: 莫里斯蠕蟲

2.**例項

#include #include typedef struct  struct_t;

double fun(int i)

int main(int argc, char *ar**)

這段**在linux作業系統下執行結果如下:

在這個程式中,有乙個結構體變數struct_t

typedef struct  struct_t;

s.d = 3.14;

s.a[i] = 1073741824;

該結構體在「記憶體」中的儲存結構可以用如下圖表示:

執行**時,帶的引數就是i的值,從1~6變化:

c 陣列訪問越界的問題

include stdafx.h int main 如上 中,對b的賦值顯然超出了b所包含的記憶體空間,所以a的值被破壞了。多說一句 求陣列長度可以用如下 include stdafx.h int main 要注意的是sizeof是關鍵字,而不是函式,該關鍵字的返回值在編譯的時候就已經被確定。在c9...

C C 分析陣列越界訪問導致死迴圈

閱讀下面 並分析導致其結果的原因 以下分析基於vs環境的除錯 include include intmain 擁有10個元素的整型陣列 for i 0 i 12 i 迴圈13次,越界訪問 system pause return0 分析 整型陣列arr有10個元素,for迴圈13次,導致陣列越界訪問。...

C語言中陣列越界訪問造成死迴圈現象

本篇文章純屬娛樂,沒太多技術性的東西。只是我覺得還比較有意思,所以記一下!大俠請繞道!include int main int argc,char argv printf program is end n return 0 很顯然,在本段 中,出現了乙個越界操作的問題。不過幸運的是,編譯還是通得過的...