最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言野指針及如何規(guī)避詳解

 更新時間:2023年09月25日 11:28:05   作者:謓澤  
這篇文章主要為大家介紹了C語言野指針及如何規(guī)避詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

1:什么是野指針?

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

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

2:如何規(guī)避野指針

指針變量的初始化

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

指針常見錯誤

引用未初始化的指針變量

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

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

指針越界訪問

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

 指針變量越界數(shù)組導致野指針問題!

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

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

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

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

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

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

指針使用之前檢查有效性

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

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

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

以上就是C語言野指針及如何規(guī)避詳解的詳細內(nèi)容,更多關(guān)于C語言野指針規(guī)避的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++中函數(shù)的用法小結(jié)

    C++中函數(shù)的用法小結(jié)

    這篇文章主要為大家分享下本人在閱讀《C++ Primer》函數(shù)一章時的讀書總結(jié),需要的朋友可以參考下
    2014-02-02
  • C語言版三子棋小游戲

    C語言版三子棋小游戲

    這篇文章主要為大家詳細介紹了C語言版三子棋小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 將Deepseek接入本地Vscode的圖文步驟

    將Deepseek接入本地Vscode的圖文步驟

    本文主要介紹了將Deepseek接入本地Vscode的圖文步驟,文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-02-02
  • C++動態(tài)分配和撤銷內(nèi)存以及結(jié)構(gòu)體類型作為函數(shù)參數(shù)

    C++動態(tài)分配和撤銷內(nèi)存以及結(jié)構(gòu)體類型作為函數(shù)參數(shù)

    這篇文章主要介紹了C++動態(tài)分配和撤銷內(nèi)存以及結(jié)構(gòu)體類型作為函數(shù)參數(shù),是C++入門學習中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09
  • Ubuntu 環(huán)境下的 C/C++ 編譯與調(diào)試配置方法

    Ubuntu 環(huán)境下的 C/C++ 編譯與調(diào)試配置方法

    本文檔詳細介紹了如何在Ubuntu環(huán)境中使用VSCode進行C/C++的編譯與調(diào)試配置,通過配置`tasks.json`和`launch.json`,實現(xiàn)了統(tǒng)一管理輸出文件、優(yōu)化調(diào)試流程以及跨平臺兼容性,配置了`g++`編譯器和`gdb`調(diào)試器,并使用C/C++插件來提高開發(fā)效率,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • 詳解C++中對構(gòu)造函數(shù)和賦值運算符的復制和移動操作

    詳解C++中對構(gòu)造函數(shù)和賦值運算符的復制和移動操作

    這篇文章主要介紹了C++中對構(gòu)造函數(shù)和賦值運算符的復制和移動,是C++入門學習中的基礎(chǔ)知識,需要的朋友可以參考下
    2016-01-01
  • C++取得當前時間的方法

    C++取得當前時間的方法

    這篇文章主要介紹了C++取得當前時間的方法,實例展示了通過系統(tǒng)函數(shù)獲取當前時間的實現(xiàn)方法,非常簡單易懂,需要的朋友可以參考下
    2014-10-10
  • C++小知識:用++i替代i++

    C++小知識:用++i替代i++

    今天小編就為大家分享一篇關(guān)于C++小知識:用++i替代i++,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • C語言循環(huán)隊列的表示與實現(xiàn)實例詳解

    C語言循環(huán)隊列的表示與實現(xiàn)實例詳解

    這篇文章主要介紹了C語言循環(huán)隊列的表示與實現(xiàn),對于數(shù)據(jù)結(jié)構(gòu)與算法的研究很有幫助,需要的朋友可以參考下
    2014-07-07
  • 如何將編譯過的C++庫迅速部署在Visual?Studio新項目中

    如何將編譯過的C++庫迅速部署在Visual?Studio新項目中

    本文介紹在Visual?Studio中,通過屬性表,使得一個新建解決方案中的項目可以快速配置已有解決方案的項目中各類已編譯好的C++第三方庫的方法,感興趣的朋友跟隨小編一起看看吧
    2024-05-05

最新評論

从江县| 呼和浩特市| 新龙县| 泸州市| 宁津县| 尼勒克县| 太保市| 普洱| 沙河市| 闽清县| 金华市| 望江县| 桃源县| 宣恩县| 南岸区| 岳阳县| 温州市| 云南省| 博罗县| 屏南县| 东阿县| 临夏市| 岳西县| 恩平市| 宿松县| 哈巴河县| 义乌市| 吴川市| 霸州市| 梅州市| 柞水县| 东明县| 明溪县| 固安县| 枣强县| 赣榆县| 离岛区| 五大连池市| 志丹县| 绵竹市| 高要市|