国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

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

GReq_mcu168 ? 來源:嗶哩嗶哩 ? 作者:C語言_編程俱樂部 ? 2021-03-18 11:18 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

1 懸空指針

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

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

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

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

void *p = malloc(size);assert(p);free(p); // 避免“懸空指針”p = NULL; 這么做的好處是一旦再次使用被釋放的指針 p,就會立刻引發“段錯誤”,程序員也就能立刻知道應該修改C語言代碼了。

2野指針

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

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

void *p = NULL;void *data = malloc(size);這兩點內容,是C語言比較重要的內容,希望大家在編碼的時候一定要注意。

編輯:jq

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

    關注

    183

    文章

    7644

    瀏覽量

    145580

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

文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    指針與函數詳解

    。 2、函數指針函數指針,本質上他是一個指針,并不是一個函數。在C語言中有些概念是一脈相承的,之前的推文《
    發表于 01-23 06:02

    C語言重點—指針

    C語言是比較偏底層的語言,為什么他比較偏底層,就是因為他的很多操作都是直接針對內存操作的。 這篇我們就來講解C語言的一大特點,也是難點,
    發表于 01-22 08:23

    函數指針介紹

    就是一個指針函數。其返回值是一個 int 類型的指針,是一個地址。 指針函數也沒什么特別的,和普通函數對比不過就是其返回了一個指針(即地址值)而已。
    發表于 01-21 08:11

    指針難學的4點原因分析

    p時,前面的*號只是告訴編譯器,p是個指針,其它沒什么用處。我個人一直認為,當初發明C語言時,定義指針p時不應該用*來說明,你可以用@號,用#號,用$號,隨便用什么號來說明p是個
    發表于 01-16 06:12

    請教一個C語言指針問題,求解答

    C語言指針,多多少少還是有些難度的,容易有些混淆。 請教大家下面的這個表達式是啥意思呢? short (*p)[size] = (short (*)[size])0x8ff00000; 是否為在0x8ff00000地址處分
    發表于 01-12 08:14

    C語言指針p、*p、&p、*&p、&*p分別代表什么

    C語言中,指針是非常重要的概念。指針是一個變量,其值為另一個變量的地址。使用指針可以直接訪問內存中的數據,這使得
    發表于 01-07 07:34

    C語言函數指針的六個高級的應用場景

    函數指針是一種非常強大的編程工具,它可以讓我們以更加靈活的方式編寫程序。在本文中,我們將介紹 6 個函數指針的高級應用場景,并貼出相應的代碼案例和解釋。 回調函數 回調函數是指在某個事件發生時被
    發表于 01-04 12:25

    C語言回調函數原來這么簡單

    ” 這個概念,它是回調函數能夠實現的重要基礎。 1、函數指針學習過C語言的伙伴都知道,C語言中的靈魂 —
    發表于 12-30 06:45

    Typedef在C語言中的應用

    Typedef 在C語言中頻繁用以聲明一個已經存在的數據類型的同義字。也可以用預處理器做類似的事。例如,思考一下下面的例子: #define dPS struct s * typedef
    發表于 12-22 13:53

    C語言中可以嵌套匯編語言嗎?

    請問C語言中可以嵌套匯編語言嗎?
    發表于 12-15 08:14

    指針的基礎

    1. int va; 這是一個整型變量,32位CPU的話,占有32個bite 2. int *va; 這是一個整型指針變量,用于存放一個整型變量的地址 3. int **va; 這是一個整型
    發表于 12-15 06:06

    函數指針指針函數的區別

    在學習arm過程中發現這“指針函數”與“函數指針”容易搞錯,所以今天,我自己想一次把它搞清楚,找了一些資料,和大家的一些總結,整理到此。和大家分享。   首先它們之間的定義:   1、指針函數是指帶
    發表于 12-12 06:34

    函數指針的概念

    函數指針是指向函數的指針變量。 通常我們說的指針變量是指向一個整型、字符型或數組等變量,而函數指針是指向函數。 函數指針可以像一般函數一樣
    發表于 12-11 08:10

    如何用函數指針調用函數

    (void) { int(*p)(int, int);//定義一個函數指針 int a, b, c; p = Max;//把函數Max賦給指針變量p, 使p指向Max函數 printf(\"
    發表于 12-11 06:26

    C指針的妙用分享

    1、你知道嗎?指針其實是個天生的數學家!看這個: #include int main() { int arr[] = {10, 20, 30, 40, 50}; int *p = arr
    發表于 11-17 06:35