衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C語言中的懸空指針和野指針是什么意思?

單片機與嵌入式 ? 來源:單片機與嵌入式 ? 2023-02-09 17:20 ? 次閱讀

提起C語言大部分開發者很自然就會想到指針二字,沒錯,作為C的核心和靈魂,它的地位咱們就不再贅述了,今天我們想跟大家講的是指針中的兩個特有名詞:“懸空指針”和“野指針”。

1 懸空指針

C語言中的指針可以指向一塊內存,如果這塊內存稍后被操作系統回收(被釋放),但是指針仍然指向這塊內存,那么,此時該指針就是“懸空指針”。下面這段C語言代碼是一個例子,請看:

b32f37aa-a795-11ed-bfe3-dac502259ad0.png

C語言中的“懸空指針”會引發不可預知的錯誤,而且這種錯誤一旦發生,很難定位。這是因為在 free(p) 之后,p 指針仍然指向之前分配的內存,如果這塊內存暫時可以被程序訪問并且不會造成沖突,那么之后使用 p 并不會引發錯誤。

最難調試的 bug 總是不能輕易復現的 bug,對不?

所以在實際的C語言程序開發中,為了避免出現“懸空指針”引發不可預知的錯誤,在釋放內存之后,常常會將指針 p 賦值為 NULL:

b33fbbf2-a795-11ed-bfe3-dac502259ad0.png

這么做的好處是一旦再次使用被釋放的指針 p,就會立刻引發“段錯誤”,程序員也就能立刻知道應該修改C語言代碼了。

2野指針

上面我們講的“懸空指針”是指向被釋放內存的指針,“野指針”則是不確定其具體指向的指針。“野指針”最常來自于未初始化的指針,例如下面這段C語言代碼:

b34a48ec-a795-11ed-bfe3-dac502259ad0.png

因為“野指針”可能指向任意內存段,因此它可能會損壞正常的數據,也有可能引發其他未知錯誤,所以C語言中的“野指針”危害性甚至比“懸空指針”還要嚴重。在實際的C語言程序開發中,定義指針時,一般都要盡量避免“野指針”的出現(賦初值):

b356a218-a795-11ed-bfe3-dac502259ad0.png

這兩點內容,是C語言比較重要的內容,希望大家在編碼的時候一定要注意。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 內存
    +關注

    關注

    8

    文章

    3055

    瀏覽量

    74328
  • C語言
    +關注

    關注

    180

    文章

    7614

    瀏覽量

    137712
  • 指針
    +關注

    關注

    1

    文章

    481

    瀏覽量

    70609
  • 代碼
    +關注

    關注

    30

    文章

    4825

    瀏覽量

    69046

原文標題:C語言中的“懸空指針”和“野指針”是什么意思?

文章出處:【微信號:單片機與嵌入式,微信公眾號:單片機與嵌入式】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    C語言中懸空指針指針

    提起C語言,大部分開發者很自然就會想到指針二字。沒錯,作為C的核心和靈魂,它的地位咱們就不再贅述了。
    發表于 07-20 11:58 ?1039次閱讀

    C語言中void指針的基本認識及典型應用

    C語言中,*類型就是指針類型,比如 int *p,double *q,雖然是不一樣的指針,但是大小卻一樣sizeof(p) == sizeof(q),因為它們都是同一種類型*類型的。
    發表于 02-01 09:26 ?1139次閱讀

    C語言中多級指針的概念和使用方法

    多級指針C語言中是一種特殊的指針類型,它可以指向其他指針指針
    發表于 08-16 16:16 ?1186次閱讀

    C語言中指針指針的概念及產生原因

    C語言中指針是一種非常強大和靈活的工具,但同時也容易引發一些問題,其中包括空指針指針
    發表于 08-16 16:18 ?1537次閱讀

    C語言中指針是什么?如何規避指針

    C語言中指針是什么?有哪幾種類型?指針有何作用?如何規避指針
    發表于 02-25 06:47

    C語言指針電子教程

    本資料是一份不錯的關于C語言指針的電子教程,希望對大家有所幫助... 指針簡介 指針C
    發表于 07-30 16:00 ?77次下載

    C語言中指針的介紹非常詳細

    C語言中指針的介紹非常詳細 C語言中指針的介紹非常詳細
    發表于 12-25 10:39 ?57次下載

    c語言函數指針定義,指針函數和函數指針的區別

     往往,我們一提到指針函數和函數指針的時候,就有很多人弄不懂。下面就由小編詳細為大家介紹C語言中函數指針
    發表于 11-16 15:18 ?3639次閱讀

    基于C語言中指針的基本用法解析

    C語言中其它的知識都學得可以,唯獨指針搞不懂。如果是這樣,我可以很負責的告訴你,對于這門編程語言,你等于是沒學。所以學好指針對于初學者是非
    的頭像 發表于 01-09 15:12 ?4837次閱讀

    簡述C語言中什么是懸空指針指針

    提起C語言大部分開發者很自然就會想到指針二字,沒錯,作為C的核心和靈魂,它的地位咱們就不再贅述了,今天我們想跟大家講的是指針中的兩個特有名詞
    的頭像 發表于 03-18 11:18 ?2467次閱讀

    C語言中指針是怎么來的?

    )、malloc函數申請堆內存返回的地址(但未使用free釋放,是在堆空間動態申請) 需要注意的是,指針不是NULL指針,通常NULL指針可以使用if語句來判斷,但是
    的頭像 發表于 06-01 16:43 ?2598次閱讀

    C語言初識指針

    目錄1. 指針是什么?2. 指針指針類型3.指針3.1
    發表于 12-31 19:57 ?26次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>初識<b class='flag-5'>指針</b>

    C語言中指針(重點)超詳細

    C語言中指針1、指針是什么2、指針指針類型2.1、指針
    發表于 01-13 14:10 ?11次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言中</b>的<b class='flag-5'>指針</b>(重點)超詳細

    C語言中什么是指針數組

    C語言中一個數組,若其元素均為指針類型數據,稱為指針數組,也就是說,指針數組中的每一個元素都存放一個地址,相當于一個
    的頭像 發表于 03-10 15:26 ?1872次閱讀

    簡述C語言中指針重點

    C語言中一個函數可以返回一個整型值、字符值、實型值等,也可以返回指針型的數據,即地址,其概念與以前類似,只是返回的值的類型是指針類型。
    的頭像 發表于 03-10 15:28 ?643次閱讀
    喜达百家乐官网的玩法技巧和规则 | 百家乐投注方法投资法| 百家乐输一押二| 姚记娱乐城安全| 百家乐官网7赢6| 免费百家乐官网预测软件| 粤港澳百家乐赌场娱乐网规则| 宝马会娱乐城网址| 百家乐官网哪条下路好| 百家乐折叠桌| 大发888娱乐城下载平台| 外汇| 百家乐下载游戏| 太阳城现金| 菲律宾百家乐官网娱乐网| 真人百家乐皇冠网| 大发888体育竞技| 网上百家乐官网真实度| 澳门百家乐指数| 大发888加速器| 百家乐官网一般多大码| 豪门百家乐的玩法技巧和规则| 黎平县| 疯狂百家乐官网游戏| 大发888的任务怎么做| 百家乐官网群号| 大三巴百家乐的玩法技巧和规则| 赤水市| 百家乐美女真人| 澳门娱乐城开户| 一路发娱乐| 风水学坐向24山| 九头鸟棋牌游戏中心| 都坊百家乐官网的玩法技巧和规则 | 百家乐官网对子赔率| 百家乐庄闲的分布| 易胜博足球开户| 养狗对做生意风水好吗| 娱乐城开户免存送现金| 赌百家乐官网2号破解| 伟德亚洲|