1. 程式人生 > >C語言中區域性變數的地址覆蓋問題

C語言中區域性變數的地址覆蓋問題

1.問題描述

    在C語言的一個函式中定義了幾個區域性變數如A,B,C。當對其中一個變數A取地址並對該地址賦值時,如果賦值的地址大小超過A所佔的空間大小,則其它的變數會被修改。

2.除錯過程

   把被改變的變數的地址和A的地址打印出來,發現兩者的地址差小於變數型別的地址。

3.舉例

fun()

{

int a = 1, b = 2, c = 3;

changeVarToZero(&a, sizeof(int) * 2);    //changeVarToZero功能是把從變數a地址開始的兩整形資料大小的空間內容變為0

//發現b或者c的變數會被改變

}

4.啟示

    C語言函式的區域性變數牽扯到指標操作時候,一定要仔細進行檢查是否超出變數的邊界。