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

C++野指針和懸空指針的實(shí)現(xiàn)方法

 更新時(shí)間:2021年08月08日 09:55:51   作者:Linux猿  
野指針和懸空指針是指針中常見的兩個(gè)概念,本文詳細(xì)的介紹了這兩種的使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

野指針和懸空指針是指針中常見的兩個(gè)概念,本文結(jié)合實(shí)例講解來講解下。

一、野指針

野指針是指尚未初始化的指針,既不指向合法的內(nèi)存空間,也沒有使用 NULL/nullptr 初始化指針。

來看一個(gè)簡單例子:

#include <iostream>
using namespace std;
 
int main()
{
    int *p;     // 野指針
    int *q = NULL; // 非野指針
    p = new int(5);  // p 現(xiàn)在不再是野指針
    q = new int(10); 
    cout<<"*p = "<<*p<<endl;
    cout<<"*q = "<<*q<<endl;
    free(p);
    free(q);
    return 0;
}

輸出結(jié)果為:

linuxy@linuxy:~/wildPointer$ ./main
*p = 5
*q = 10
linuxy@linuxy:~/wildPointer$

p 在定義時(shí)并沒有賦初值,這時(shí)候?yàn)橐爸羔槨?/p>

二、懸空指針

懸空指針是指 指針指向的內(nèi)存空間已被釋放或不再有效。

有三種情況會(huì)產(chǎn)生懸空指針,下面結(jié)合實(shí)例來看一下:

2.1 情況一

釋放指針資源后,未再次賦值前。

#include <iostream>
using namespace std;
 
int main()
{
    int *p = new int(5);
    cout<<"*p = "<<*p<<endl;
    free(p);  // p 在釋放后成為懸空指針
    p = NULL; // 非懸空指針
    return 0;
}

p 指針在被 free 后,成為懸空指針,被 NULL 賦值后不再是懸空指針。

注意:這里 free 掉的是 p 的內(nèi)存空間,并不是變量 p,結(jié)合一個(gè)例子看下:

#include <iostream>
using namespace std;
 
int main()
{
    int *p = new int(5);
    cout<<"*p = "<<*p<<endl;
    cout<<"p 地址:"<<p<<endl;
    free(p);  // p 在釋放后成為懸空指針
    cout<<"p 地址:"<<p<<endl;
    cout<<"*p = "<<*p<<endl;
    p = NULL; // 非懸空指針
    return 0;
}

輸出結(jié)果為:

linuxy@linuxy:~/wildPointer$ ./main
*p = 5
p 地址:0x55a885ef6eb0
p 地址:0x55a885ef6eb0
*p = 0
linuxy@linuxy:~/wildPointer$

可以看到, free 前后 p 的地址是不變的,free 釋放的是 p 指向的內(nèi)存空間,釋放后表示該快內(nèi)存可以重新分配了,至于 free 后 *p 的值,視不同編譯器情況而不同。

2.2 情況二

超出了變量的作用范圍。

#include <iostream>
using namespace std;
 
int main()
{
    int *p;
    {
        int tmp = 10;
        p = &tmp;
    }
    //p 在此處成為懸空指針
    return 0;
} 

在上述例了中,變量 tmp 的作用范圍為最近的一層括號(hào)內(nèi),在括號(hào)外引用便超出了變量的作用范圍。

2.3 情況三

指向了函數(shù)局部變量。

#include <iostream>
using namespace std;
 
int* getVal() {
    int tmp = 10;
    return &tmp;
}
 
int main()
{
    int *p = getVal(); //懸空指針
    cout<<"*p = "<<*p<<endl;
    return 0;
}

在函數(shù) getVal 執(zhí)行完后,局部變量的內(nèi)存空間會(huì)被釋放,而這里 p 指向了函數(shù)內(nèi)的局部變量,p 便成為了懸空指針,可以將 tmp 變?yōu)?static 的。

到此這篇關(guān)于C++實(shí)現(xiàn)野指針和懸空指針的文章就介紹到這了,更多相關(guān)C++ 野指針和懸空指針內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言獲取程序名稱的四種方法

    C語言獲取程序名稱的四種方法

    這篇文章主要為大家詳細(xì)介紹了C語言中獲取程序名稱的四種方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-11-11
  • 利用C語言編寫一個(gè)十六進(jìn)制日志轉(zhuǎn)換工具

    利用C語言編寫一個(gè)十六進(jìn)制日志轉(zhuǎn)換工具

    這篇文章主要為大家詳細(xì)介紹了如何利用C語言編寫一個(gè)十六進(jìn)制日志轉(zhuǎn)換工具,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-11-11
  • Qt實(shí)現(xiàn)拖動(dòng)單個(gè)控件移動(dòng)的示例代碼

    Qt實(shí)現(xiàn)拖動(dòng)單個(gè)控件移動(dòng)的示例代碼

    做慣了靜態(tài)圖,今天來搞一搞動(dòng)態(tài)圖吧!本文將利用Qt實(shí)現(xiàn)拖動(dòng)單個(gè)控件移動(dòng)效果,文中的示例代碼講解詳細(xì),感興趣的可以動(dòng)手嘗試一下
    2022-06-06
  • C語言中調(diào)用Swift函數(shù)實(shí)例詳解

    C語言中調(diào)用Swift函數(shù)實(shí)例詳解

    這篇文章主要介紹了C語言中調(diào)用Swift函數(shù)實(shí)例詳解的相關(guān)資料,實(shí)現(xiàn)該功能可以通過定義全局的指向Blocks的對(duì)象指針來實(shí)現(xiàn),需要的朋友可以參考下
    2017-07-07
  • C++開發(fā)的Redis數(shù)據(jù)導(dǎo)入工具優(yōu)化

    C++開發(fā)的Redis數(shù)據(jù)導(dǎo)入工具優(yōu)化

    這篇文章主要介紹了C++開發(fā)的Redis數(shù)據(jù)導(dǎo)入工具優(yōu)化方法的相關(guān)資料,需要的朋友可以參考下
    2015-07-07
  • C語言實(shí)現(xiàn)簡易版掃雷游戲

    C語言實(shí)現(xiàn)簡易版掃雷游戲

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)簡易版掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • C++實(shí)現(xiàn)將圖片轉(zhuǎn)換為馬賽克效果的示例代碼

    C++實(shí)現(xiàn)將圖片轉(zhuǎn)換為馬賽克效果的示例代碼

    這篇文章主要為大家詳細(xì)介紹了C++如何實(shí)現(xiàn)將圖片轉(zhuǎn)換為馬賽克效果,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以了解一下
    2023-01-01
  • Qt實(shí)現(xiàn)網(wǎng)易云音樂進(jìn)度條效果

    Qt實(shí)現(xiàn)網(wǎng)易云音樂進(jìn)度條效果

    這篇文章主要為大家詳細(xì)介紹了Qt實(shí)現(xiàn)網(wǎng)易云音樂進(jìn)度條效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • Qt Widgets庫的實(shí)現(xiàn)實(shí)例

    Qt Widgets庫的實(shí)現(xiàn)實(shí)例

    QtWidgets 提供了豐富的控件和工具,適合開發(fā)傳統(tǒng)桌面應(yīng)用程序本文主要介紹了Qt Widgets庫的實(shí)現(xiàn)實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-09-09
  • C語言非遞歸算法解決快速排序與歸并排序產(chǎn)生的棧溢出

    C語言非遞歸算法解決快速排序與歸并排序產(chǎn)生的棧溢出

    上期我們講完了排序算法下,不知道小伙伴們有沒有發(fā)現(xiàn)一個(gè)問題,快速排序和歸并排序我們都是用遞歸來實(shí)現(xiàn)的,可能有小伙伴會(huì)問,如果說數(shù)據(jù)量很多話,棧區(qū)空間會(huì)不會(huì)不夠用呢?這期我們就來解決使用遞歸實(shí)現(xiàn)的排序?qū)е聴R绯鋈绾谓鉀Q
    2022-04-04

最新評(píng)論

西峡县| 荥经县| 清丰县| 崇州市| 彝良县| 晴隆县| 麦盖提县| 延吉市| 茌平县| 屏南县| 陕西省| 博客| 邹平县| 梓潼县| 垫江县| 阜康市| 泰来县| 上饶县| 屏南县| 钦州市| 鞍山市| 高邮市| 交口县| 湖南省| 明水县| 友谊县| 五指山市| 常德市| 舟山市| 北流市| 福海县| 新野县| 武宁县| 蓬安县| 两当县| 浦城县| 麻江县| 宜兰县| 类乌齐县| 正蓝旗| 榆林市|