C語言野指標與空指標專篇解讀 - IT145.com
文章推薦指數: 80 %
1. 指標未初始化:指標變數剛被建立時不會自動成為NULL指標,它的預設值是隨機的,它所指的空間是隨機的。
程式碼 ...
首頁 > 軟體
C語言野指標與空指標專篇解讀
2021-11-1713:01:23
一:野指標
概念:野指標就是指向的記憶體地址是未知的(隨機的,不正確的,沒有明確限制的)。
說明:指標變數也是變數,是變數就可以任意賦值。
但是,任意數值賦值給指標變數沒有意義,因為這樣的指標就成了野指標,此指標指向的區域是未知(作業系統不允許操作此指標指向的記憶體區域)。
注:野指標不會直接引發錯誤,操作野指標指向的記憶體區域才會出問題。
程式碼範例:
inta=100;
int*p;
p=a;//把a的值賦值給指標變數p,p為野指標,ok,不會有問題,但沒有意義
p=0x12345678;//給指標變數p賦值,p為野指標,ok,不會有問題,但沒有意義
*p=1000;//對野指標進行賦值操作就不可以了
把a的值賦值給指標變數p,p為野指標,ok,不會有問題,但沒有意義。
給指標變數p賦值,p為野指標,ok,不會有問題,但沒有意義。
1.1:野指標的成因
1.指標未初始化:指標變數剛被建立時不會自動成為NULL指標,它的預設值是隨機的,它所指的空間是隨機的。
程式碼範例:
intmain()
{
int*p;
*p=20;
return0;
}
(個人理解:指標變數有作業系統隨機賦值,未指向一個具體空間,沒有落腳點)
2.指標越界存取:指標指向的範圍超出了合理範圍,或者呼叫函數時返回指向棧記憶體的指標或參照,因為棧記憶體在函數結束時會被釋放。
程式碼範例:
intmain()
{
intarr[10]={0};
int*p=arr;
for(inti=0;i<=11;i++)
{
*(P++)=i;//當指標指向的範圍超出陣列arr的範圍,p變成野指標。
}
return0;
}
3.指標釋放後未置空:有時指標在free或delete後未賦值NULL,便會使人以為是合法的。
其實它們只是把指標所指的記憶體給釋放掉,但並沒有把指標本身忘記。
此時指標指向的就是無效記憶體。
釋放後的指標應立即將指標置為NULL,防止產生「野指標」。
程式碼範例:
intmain()
{
int*p=NULL;
p=malloc(10*sizeof(int));
if(!p)
{
return;
}
//成功開闢記憶體,可以操作記憶體。
free(p);
p=NULL;
return0;
}
(個人理解:我們前一天住了個賓館,第二天退房了,雖然我們知道一個該房間的門牌號,但是保潔阿姨已經收拾了房間,我們就不知道房間裡具體是什麼樣的了,所以我們也沒法操作了。
)
2.1:規避野指標
1.初始化指標;
程式碼範例:
intmain()
{
int*p=NULL;
inta=10;
p=&a;
*p=20;
return0;
}
2.避免指標越界;
程式碼範例:
intmain()
{
intarr[10]={0};
int*p=arr;
for(inti=0;i<10;i++)
{
*(P++)=i;//嚴格遵守有效範圍。
}
return0;
}
3避免返回區域性變數的地址;
程式碼範例:
int*test()
{
inta=20;
return&a;
}
intmain()
{
int*p=NULL;
p=test();
printf("%dn",*p);
return0;
}
這與變數的作用域有關,區域性變數存在棧區,當被調函數結束後,棧區上區域性變數的記憶體空間被釋放,若再去存取該空間就不合理了。
4.開闢的指標釋放後置為NULL;
當指標p指向的記憶體空間釋放時,沒有設定指標p的值為NULL。
free只是把記憶體空間釋放了,但是並沒有將指標p的值賦為NULL。
程式碼範例:
intmain()
{
int*p=NULL;
p=malloc(10*sizeof(int));
if(!p)
{
return;
}
//成功開闢記憶體,可以操作記憶體。
free(p);
p=NULL;//避免野指標
return0;
}
5.養成良好的程式設計習慣;
好的程式設計習慣可以避免很多問題,道阻且長,但行則將至!!!
二:空指標
*NULL是一個值為0的宏常數:#defineNULL((void)0)
意義:為了標誌指標變數沒有指向任何變數(空閒可用),在C語言中,通常把NULL賦值給此指標,這樣就標誌此指標為空指標,沒有指向任何空間。
注意:對指標解除參照操作可以獲得它所指向的值。
但從定義上看,NULL指標並未指向任何東西,因為對一個NULL指標解除參照是一個非法的操作,所以在解除參照之前,必須確保它不是一個NULL指標。
程式碼範例:
voidtest(){
char*p=NULL;
**//給p指向的記憶體區域拷貝內容**
strcpy(p,"1111");//err
char*q=0x1122;
//給q指向的記憶體區域拷貝內容
strcpy(q,"2222");//err
}
OK!!!觀眾老爺們,這裡只是介紹了野指標與空指標,如果朋友們覺得有一點點作用的話,希望朋友們能夠給予小菜鳥一點支援!後續繼續給朋友們帶來更好的博文,還希望朋友們能夠繼續關注,小菜鳥致力於把自己的學習經驗與個人理解更多的分享給大家,望大家喜歡與指正。
到此這篇關於C語言野指標與空指標專篇解讀的文章就介紹到這了,更多相關C語言野指標空指標內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
德漢姆中學就讀條件
MacBook项目2009年学校开始实施MacBook项目,所有师生配备一本MacBook,并同步更新了校园无线网络。
学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。
因此2011
2021-06-0109:32:01
黑科技的輕簡出行,告別「電量焦慮症」:Anker氮化鎵超能充系列
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果MacBook很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-0109:31:42
吳亦凡廠牌首秀,L4WUDU居然忘詞了,Rapper和明星比還是有差距!
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、MacOvaSeas、林渝植等人全部出场。
然而让
2021-06-0109:31:34
IPFS、Chia、Bzz和ICP挖礦該怎麼選?哪一個更有優勢?
目前应用IPFS的机构:1谷歌浏览器支持IPFS分布式协议2万维网(历史档案博物馆)数据库3火狐浏览器支持IPFS分布式协议4EOS等数字货币数据存储5美国国会图书馆,历史资料永久保存在IPFS6加
2021-06-0109:31:24
有哪些事是買了雪佛蘭後才知道的?美事偷著樂,開拓者車主隨聊
开拓者的车机是兼容苹果和安卓,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-0109:30:48
iPhone12在618最新定價,跌價幅度超過1400元,還等iPhone13嗎?
不仅是安卓手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。
iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-0109:30:45
熱門文章
1win10升級後無法調整螢幕解析度怎麼辦
2Win7/8.1/10/Office啟用工具使用教學(KMSpico)
3win10下【寬頻連線錯誤813】怎麼辦?
4Excel密碼破解:開啟密碼,保護密碼,VBA密碼
5如何更改AndroidStudio的程式碼字型和顏色
6EXCEL技巧——EXCEL如何製作族譜
7AdobePhotoshopCC官方中文版安裝破解教學
8如何使用PPT製作轉盤抽獎的動畫
9excel表格怎麼設定到期日前自動提醒功能
10如何在Photoshop中開啟並使用pat格式的檔案
IT145.comE-mail:sddin#qq.com
延伸文章資訊
- 1空指標- 维基百科,自由的百科全书
此條目介紹的是以各種程式語言為基礎介紹Null Pointer的概念。关于C++11語言標準的關鍵字,请见「nullptr」。 在程式語言中,空指標 ...
- 2C語言中的空指標是什麼意思? - 第一問答網
C語言中的空指標,C語言中的空指標是什麼意思?,1樓雨曄int p 47 這個用法是不正確的這個語句等於下邊的int p p 47 你直接將指標p的值賦值為47是很 ...
- 3C語言中,空指標NULL會佔記憶體嗎?多少位元組 - 就問知識人
C語言中的空指標是什麼意思,C語言中,空指標NULL會佔記憶體嗎?多少位元組,1樓匿名使用者這樣一看才知道大家對空指標的概念如此渾濁哦首先void 這不 ...
- 4C語言空指標NULL - C語言零基礎入門教程_其它 - 程式人生
目錄一.指標簡介二.空指標NULL 三.關於NULL 和0 四.猜你喜歡零基礎C/C++ 學習路線推薦: C/C++ 學習目錄>> C 語言基礎入門.
- 5C語言知識彙總| 56-C語言NULL空指標以及void指標 - IT人
NULL 是“零值、等於零”的意思,在C語言中表示空指標。從表面上理解,空指標是不指向任何資料的指標,是無效指標,程式使用它不會產生效果。