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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

空指针、悬空指针、野指针

發(fā)布時(shí)間:2024/4/18 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 空指针、悬空指针、野指针 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 前言
  • 一、指針?
  • 二、指針的應(yīng)用場(chǎng)景
  • 三、 空指針
  • 四、 懸空指針
  • 五、 野指針
    • 正確用法
  • 總結(jié)


前言

相信很多小伙伴對(duì)指針的使用都有一定的了解了。但更多的人可能對(duì)指針又愛(ài)又恨。這次我們談點(diǎn)重要的,進(jìn)一步加深對(duì)指針的理解


一、指針?

指針是一種特別變量,全稱(chēng)是指針變量,專(zhuān)用于存放其它變量在內(nèi)存中的地址編號(hào)。把指針指向具體的內(nèi)存變量的地址,就是對(duì)指針賦值。

二、指針的應(yīng)用場(chǎng)景

用作函數(shù)的參數(shù)傳遞和函數(shù)的返回值。 利用指針傳遞參數(shù),可避免變量復(fù)制,減少內(nèi)存開(kāi)銷(xiāo),提高效率。

三、 空指針

沒(méi)有賦值的指針變量(沒(méi)有指向內(nèi)存變量的地址),對(duì)空指針操作會(huì)造成程序的段錯(cuò)誤(Core dump)


四、 懸空指針

指針指向的內(nèi)存已釋放,但指針的值沒(méi)有被清零,對(duì)懸空指針操作的結(jié)果不可預(yù)知

int main(void) {int*p=nullptr;int*p2=new int;p=p2;delete p2; }

此時(shí)p和p2就是懸空指針,指向的內(nèi)存已經(jīng)被釋放。繼續(xù)使用這兩個(gè)指針,行為不可預(yù)知。需要設(shè)置為p=p2=nullptr。

解決辦法:指針free或delete之后及時(shí)置空。

五、 野指針

指的是沒(méi)有被初始化過(guò)的指針。

int main(void) {int*p;//未初始化std::cout<<*p<<std::endl;//未初始化就被使用return 0; }

因此,為了防止出錯(cuò),對(duì)于指針初始化時(shí)都是賦值為nullptr,或置空,這樣在使用時(shí)編譯器就不會(huì)直接報(bào)錯(cuò),產(chǎn)生非法內(nèi)存訪問(wèn)。

正確用法

//關(guān)閉文件指針 void CFile::Close() {if(m_fp==0) return;//檢查是否為空指針,是則直接返回fclose(m_fp);//關(guān)閉文件指針,這代表著釋放了文件指針指向的內(nèi)存,此時(shí)指針就變成了懸空指針m_fp=0;//將懸空指針的值清零,避免隱藏bugmemset(m_filename,0,sizeof(m_filename));//如果存在臨時(shí)文件就刪除它if (strlen(m_filenametmp)!=0) remove(m_filenametmp);memset(m_filenametmp,0,sizeof(m_filenametmp)); }

總結(jié)

對(duì)于指針使用大家要格外小心,寫(xiě)程序時(shí)仔細(xì)考慮清楚。

野指針和懸空指針都是指向無(wú)效內(nèi)存區(qū)域(這里的無(wú)效指的是"不安全不可控")的指針,訪問(wèn)行為將會(huì)導(dǎo)致未定義行為。

避免野指針比較簡(jiǎn)單,但懸空指針比較麻煩。c++引入了智能指針,C++智能指針的本質(zhì)就是避免懸空指針的產(chǎn)生。

總結(jié)

以上是生活随笔為你收集整理的空指针、悬空指针、野指针的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。