如何安全的使用指標?

2021-09-03 02:35:08 字數 1584 閱讀 8419

指標安全使用的兩條規則

空指標安全使用指標的4條注意事項

一、指標不可以亂用,否則會導致程式崩潰。在使用指標之前,一定要弄清楚兩個問題:

(一)這個指標指向了哪兒;

(二)這個指標指向的那個地方是否有效?(能否訪問)

二、就目前來說,指標只允許指向兩個地方:

(1)指向變數和陣列

int n;

int* p1=&n;//p1指向的記憶體:乙個變數

int arr[4];

int* p2=arr;//p2指向的記憶體:乙個陣列

(2)指向0

int *p=0;//乙個空指標
當乙個指標未賦值時,會指向乙個隨機的記憶體位址,稱為「野指標」,wild pointer

int *p;//這個指標指向了乙個莫名其妙的地方

printf("%d\n",*p);//立即崩潰

三、空指標

值為0的指標,稱為空指標。

int* p=0;

當指標為空的時候,不能使用*(取值)操作。

int *p=0;

printf("%d \n",*p);//錯誤,當指標為空時,不能使用*操作

但空指標是程式設計師可以接受的一種情況,只需加乙個if判斷就能解決。

if(p)

printf("%d \n",*p);

四、安全使用指標

(1)杜絕野指標

int *p;//錯,杜絕野指標
(2)嚴防陣列越界

int arr[4];

int* p=arr;

p+=4;

*p=12;//已經越界!但不容易察覺

(3)檢查變數是否已經失效(如果指標指向的目標的生命週期已經終結【失效】,則該指標也失效)因此,指向全域性變數的指標,安全性相對較高,因為它的生命週期永恆,這一塊記憶體總是有效的。

例項1:

int main()//a失效

*p=11;//p指向了乙個無效的位置

return 0;

}

例項2:

#includeint* test() 

int main()

(4)正確判斷空指標(空指標的應用很廣,當使用者不需要此值時,便傳入空指標即可)

int* p=0;//設為空指標,這是乙個好習慣

if(p)

例項:

#includevoid min_max(int* p,int len,int* pmax,int* pmin)

if(pmax)

if(pmin)

} int main();

int a=0;

min_max(arr,10,&a,0);//應用廣泛,當使用者不需要最小值時,傳入空指標

printf("%d \n",a);

return 0;

}

DELPHI如何使用指標

大家都認為,c語言之所以強大,以及其自由性,很大部分體現在其靈活的指標運用上。因此,說指標是c語言的靈魂,一點都不為過。同時,這種說法也讓很多人產生誤解,似乎只有c語言的指標才能算指標。basic不支援指標,在此不論。其實,pascal語言本身也是支援指標的。從最初的pascal發展至今的objec...

Cookie 如何安全的使用cookie

在使用者使用某個cookie的登入某個 時,通過餅乾可以拿到安全的訪問許可權,如果餅乾被盜,那麼任何人都可以訪問 我們需要關注的是如何保證客戶端提交資料的保密性和伺服器獲取資訊的隨機性,即可變性。首先,客戶端使用安全的方式儲存使用者資訊,例如chrome不允許使用者通過瀏覽器獲取cookie,是乙個...

Chromium 如何安全的使用PostTask

官方的解釋總是最權威,有疑問看這裡或者直接看 中的說明 bind helpers.h.傳值方式描述 this 或 物件指標 如果物件本身是乙個refcountedthreadsafe,沒有問題 如果是個裸指標,應當盡量避免,除非你可以保證它的執行緒安全 base unretained 注意 使用這個...