C語言中全域性變數,靜態變數的危險性

2021-10-07 22:45:43 字數 570 閱讀 4762

全域性變數和靜態的危險性在於它的訪問許可權暴露在整個專案中,可能由於某個c檔案的某個函式的異常(陣列越界訪問,野指標等等),導致全域性變數,靜態變數有時候會莫名的被修改了,而且比較難追蹤到.這一點在多執行緒程式設計中尤其需要注意 ,看以下**執行結果:

#include int globalnum = 100;//全域性變數

int gaddr_for_static = 0; //用來儲存函式裡的靜態變數位址

void test_static_temp()

//通過指標修改任何全域性變數!靜態變數!

void setglobalvalue(int address,int v)

int main(void)

<-> value_static,addr=601038,value=10 

<1> 初始化全域性變數globelnum=100 ,記憶體位址=60103c

<2> 呼叫函式後globelnum=1234,記憶體位址=60103c

<-> value_static,addr=601038,value=4567

C 靜態變數 全域性變數 const

全域性陣列 不能被delete 作用域 區分名字的不同意義的上下文。c 中大多數作用域是用花括號界定的,名字從其宣告點到宣告所在作用域結束處都是可見的。include int main int sum 0 for int val 1 val 10 val sum return 1 名字main在花括...

C 語言裡靜態變數和全域性變數

1.全域性變數的作用域是整個專案,它只需要在乙個原始檔中定義就可以作用於所有的原始檔,其它不包括全域性變數定義的檔案需要用extern關鍵字再次宣告這個全域性變數。2.全域性變數 靜態全域性變數 靜態區域性變數都是在靜態儲存區 全域性資料區 中分配空間的,而區域性變數是在棧上分配空間的。3.全域性變...

區域性變數,區域性靜態變數,全域性變數,全域性靜態變數分別

c 記憶體到底分幾個區?一 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 注意它與資料結構中的堆是兩回事,分配方式倒是類似於鍊錶,呵呵。3 全域性...