亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

1:什么是野指針?

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

指針越界也會(huì)導(dǎo)致野指針問(wèn)題,這里解釋下:就是當(dāng)你指針指向的范圍超過(guò)數(shù)組名范圍時(shí),那么那個(gè)指針就是野指針了。

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

指針變量的初始化

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

指針常見(jiàn)錯(cuò)誤

引用未初始化的指針變量

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

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

指針越界訪問(wèn)

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

 指針變量越界數(shù)組導(dǎo)致野指針問(wèn)題!

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

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

說(shuō)的簡(jiǎn)單一點(diǎn)就是:當(dāng)你指針不知道怎么賦值,就賦值給一個(gè)空指針 NULL  

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

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

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

指針使用之前檢查有效性

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

就是當(dāng)我們對(duì)這個(gè)指針進(jìn)行初始化的話,那么它就是有效的,如果沒(méi)有初始化那么就是無(wú)效的。

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

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

相關(guān)文章

  • C++函數(shù)參數(shù)匹配規(guī)則示例小結(jié)

    C++函數(shù)參數(shù)匹配規(guī)則示例小結(jié)

    這篇文章主要介紹了C++函數(shù)參數(shù)匹配規(guī)則,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • 關(guān)于統(tǒng)計(jì)數(shù)字問(wèn)題的算法

    關(guān)于統(tǒng)計(jì)數(shù)字問(wèn)題的算法

    本文介紹了統(tǒng)計(jì)數(shù)字問(wèn)題的算法,計(jì)算出書(shū)的全部頁(yè)碼中分別用到多少次數(shù)字0,1,2,3,.....9,并有每一步的解題思路,需要的朋友可以參考下
    2015-08-08
  • C語(yǔ)言fillpoly函數(shù)詳解

    C語(yǔ)言fillpoly函數(shù)詳解

    在C語(yǔ)言中,fillpoly函數(shù)的功能是畫(huà)一個(gè)多邊形,并且把多邊形填充。填充邊框所定義的多邊形的內(nèi)部。fillpoly 函數(shù)的用法:void far fillpoly(int numpoints, int far *polypoints);。
    2015-10-10
  • C語(yǔ)言實(shí)現(xiàn)掃雷小游戲

    C語(yǔ)言實(shí)現(xiàn)掃雷小游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)掃雷小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • VC6.0代碼自動(dòng)提示 VC6.0在win7環(huán)境下代碼提示智能化

    VC6.0代碼自動(dòng)提示 VC6.0在win7環(huán)境下代碼提示智能化

    作為程序猿的你,是否已經(jīng)喜歡或習(xí)慣依賴(lài)IDE開(kāi)發(fā)環(huán)境呢,有了IDE環(huán)境,即使你想不起方法全名,只要知道某個(gè)前綴,或哪怕在提示列表中,一一查詢(xún),也可以找到自己想找的方法或?qū)傩?/div> 2013-01-01
  • C++ sort排序之降序、升序使用總結(jié)

    C++ sort排序之降序、升序使用總結(jié)

    這篇文章主要介紹了C++ sort 排序(降序、升序)使用總結(jié),需要的朋友可以參考下
    2020-11-11
  • C++使用標(biāo)準(zhǔn)庫(kù)實(shí)現(xiàn)事件和委托以及信號(hào)和槽機(jī)制

    C++使用標(biāo)準(zhǔn)庫(kù)實(shí)現(xiàn)事件和委托以及信號(hào)和槽機(jī)制

    這篇文章主要為大家詳細(xì)介紹了C++如何使用標(biāo)準(zhǔn)庫(kù)實(shí)現(xiàn)事件和委托以及信號(hào)和槽機(jī)制,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下
    2022-11-11
  • KMP 算法實(shí)例詳解

    KMP 算法實(shí)例詳解

    這篇文章主要介紹了KMP 算法實(shí)例詳解的相關(guān)資料,MP的關(guān)鍵是求出next的值、先預(yù)處理出next的值,需要的朋友可以參考下
    2017-07-07
  • C++ OpenCV繪制簡(jiǎn)易直方圖DrawHistImg

    C++ OpenCV繪制簡(jiǎn)易直方圖DrawHistImg

    本文主要介紹了一個(gè)能繪制簡(jiǎn)易直方圖的簡(jiǎn)單函數(shù)DrawHistImg,可以幫助大家快速掌握繪制的原理,可以根據(jù)自己的創(chuàng)意對(duì)其進(jìn)行改善和補(bǔ)充。需要的朋友可以參考一下
    2021-12-12
  • 基于C語(yǔ)言實(shí)現(xiàn)計(jì)算生辰八字五行的示例詳解

    基于C語(yǔ)言實(shí)現(xiàn)計(jì)算生辰八字五行的示例詳解

    生辰八字,簡(jiǎn)稱(chēng)八字,是指一個(gè)人出生時(shí)的干支歷日期;年月日時(shí)共四柱干支,每柱兩字,合共八個(gè)字。這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)計(jì)算生辰八字五行的示例代碼,需要的可以參考一下
    2023-03-03

最新評(píng)論