日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【C语言】指针(野指针)

發布時間:2023/12/14 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C语言】指针(野指针) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄?

1:什么是野指針?

2:如何規避野指針

1.1:指針變量的初始化

2.2:指針越界訪問

3.3:指針指向的空間如果我們還回去的話,就把指針指針置為NULL?

4.4:指針使用之前檢查有效性


1:什么是野指針?

野指針:就是指針指向的位置是不可知(隨機性,初始化,不正確,沒有明確限制),指針變量在定義時如果未初始化,其值是隨機的,指針變量的值是別的變量的地址,意味著指針指向了一個地址是不確定的變量,此時去解引用就是去訪問了一個不確定的地址,所以結果是不可知的。

指針越界也會導致野指針問題,這里解釋下:就是當你指針指向的范圍超過數組名范圍時,那么那個指針就是野指針了。

2:如何規避野指針

1.1:指針變量的初始化

int a = 10; int* pa = &a; //指針變量的初始化

指針常見錯誤

引用未初始化的指針變量

試圖引用未初始化的指針變量是初學者最容易犯的錯誤。未初始化的指針變量就是“野”指針,它指向的是無效的地址。


有些書上說:“如果指針變量不初始化,那么它可能指向內存中的任何一個存儲單元,這樣就會很危險。如果正好指向存儲著重要數據的內存單元,而且又不小心向這個內存單元中寫入了數據,把原來的重要數據給覆蓋了,這樣就會導致系統崩潰。”這種說法是不正確的!如果真是這樣的話就是編譯器的一個嚴重的 BUG!

2.2:指針越界訪問

#include<stdio.h>int main(void) {int arr[10] = { 0 };int i = 0; int* p = arr; //接收arr數組首元素的地址for (i = 0; i <= 12; i++)//當i=10的時候已經是非法訪問內存了,因為,我數組名的常量表達式內容只有10個元素。{*p = i; //i每次循環賦值給指針pp++; //指針自增+1,代指arr元素+1//*p++ = i 也是可以,這里雖說++優先級更高,但是它是后置運算符}return 0; }

?指針變量越界數組導致野指針問題!

3.3:指針指向的空間如果我們還回去的話,就把指針指針置為NULL?

NULL——空指針,用來初始化指針或者給指針賦值,可以轉到定義看看?#define NULL ? ?((void *)0)

說的簡單一點就是:當你指針不知道怎么賦值,就賦值給一個空指針 NULL??

Null是在計算中具有保留的值,用于指示指針不引用有效對象。程序通常使用空指針來表示條件,例如未知長度列表的結尾或未執行某些操作; 這種空指針的使用可以與可空類型和選項類型中的Nothing值進行比較。

空指針不應與未初始化的指針混淆:保證空指針與指向有效對象的任何指針進行比較。但是,根據語言和實現,未初始化的指針可能沒有任何此類保證。它可能與其他有效指針相等; 或者它可能比較等于空指針。它可能在不同的時間做兩件事。

int a = 10; int* pa = &a;printf("%d\n", *pa);*pa = 20; //此時當我們不想用它時候pa = NULL; //就把pa指針置成NULLprintf("%d\n",pa);

4.4:指針使用之前檢查有效性

當你指針變量不可以用的時候就把它設置成NULL,當你指針變量可以用的時候就不是NULL。

就是當我們對這個指針進行初始化的話,那么它就是有效的,如果沒有初始化那么就是無效的。

if (pa != NULL){//進行使用}if (pa == NULL){//不進行使用}

?好了,這已經是第三篇了,希望我可以一直堅持下去,加油!

希望大大們能給個三連+關注,你們的支持就是我前進的動力,(? ?_?)?.

?

總結

以上是生活随笔為你收集整理的【C语言】指针(野指针)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。