c 位址越界,死迴圈初探

2022-03-21 05:36:10 字數 1329 閱讀 8204

1

intmain()

210 printf("

&i = %x\n

", &i);

11return0;

12 }

執行結果

&a[0]= 19392bf0

&a[1]= 19392bf4

&a[2]= 19392bf8

&a[3]= 19392bfc

&a[4]= 19392c00

&a[5]= 19392c04

&a[6]= 19392c08

&a[7]= 19392c0c

&a[8]= 19392c10

&a[9]= 19392c14

&i = 19392c18

看到了吧 &a[10] 的位址就會和 &i 重合,如果資料越界賦值的話,就會死迴圈。

死迴圈**

1

intmain()

210 printf("

&i = %x\n

", &i);

11return0;

12 }

執行結果

&a[0]= 12d4b3e0

&a[1]= 12d4b3e4

&a[2]= 12d4b3e8

&a[3]= 12d4b3ec

&a[4]= 12d4b3f0

&a[5]= 12d4b3f4

&a[6]= 12d4b3f8

&a[7]= 12d4b3fc

&a[8]= 12d4b400

&a[9]= 12d4b404

&a[1]= 12d4b3e4

&a[2]= 12d4b3e8

&a[3]= 12d4b3ec

&a[4]= 12d4b3f0

&a[5]= 12d4b3f4

&a[6]= 12d4b3f8

&a[7]= 12d4b3fc

&a[8]= 12d4b400

&a[9]= 12d4b404

&a[1]= 12d4b3e4

&a[2]= 12d4b3e8

&a[3]= 12d4b3ec

&a[4]= 12d4b3f0

&a[5]= 12d4b3f4

&a[6]= 12d4b3f8

&a[7]= 12d4b3fc

&a[8]= 12d4b400

&a[9]= 12d4b404

就這樣迴圈下去。。。

&a[10]的位址和i重合,

i++ 到10 時 ,被複製為1,

也就是陣列越界就會和變數的位址重合,挺危險的。。。

陣列越界出現死迴圈問題

1 include 2 3int main 4 7for i 3 i 11return0 12 執行 是會陷入輸出hello world的死迴圈。原因是陣列越界,a 3 的位址指向了變數i的位址。這讓我疑惑,為什麼a 3 的位址指向變數i的位址?經過大佬的解釋 才理解。因為會進行8位元組對齊,i的位...

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

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

C語言中陣列越界導致死迴圈的測試

include 如何把這段 變成死迴圈,就像 c語言缺陷和陷阱 裡描述的那樣 經過測試發現,變數i的位址和a crazynum 的位址一樣,當執行 a crazynum 0 相當於i 0 所以死迴圈跑起來啦。測試環境 win7 32 dev c 4.9.9.2 c語言缺陷和陷阱 中的場景是編譯器按照...