0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

指針被釋放后就變成了空指針嗎

學(xué)益得智能硬件 ? 來源:學(xué)益得智能硬件 ? 2025-01-22 09:23 ? 次閱讀

指針被釋放后,是不是就變成了空指針?有好多同學(xué)提出了這樣的問題。

借用《C專家編程》上面的一段代碼,可以很好的解釋這個問題。

#include 


int main()
{
    char *s = (char *)malloc(128);


    strcpy(s, "helloworld");


free(s);


    if (s != NULL)
        strcpy(s, "12345");


    return 0;
}

這段代碼大家看下有沒有問題,能不能順利運行?

前面三行都沒有問題,指針 s 指向了一塊堆內(nèi)存,把字符串 helloworld 拷貝到堆內(nèi)存中,然后釋放了 s。

問題就出在這,很多同學(xué)不理解,指針 s 被釋放了,是不是就變成了空指針?

如果變成了空指針,那下面的判斷就不會成立,也就不會執(zhí)行拷貝操作。

其實這樣的理解是有問題的。

指針 s 指向了堆內(nèi)存,free(s) 準(zhǔn)確的講,是把 s 指向的內(nèi)存釋放掉,這個操作對 s 本身并沒有影響,s 里面保存的還是原來那塊內(nèi)存的地址,并不是空。

所以下面的判斷語句成立,繼續(xù)執(zhí)行拷貝操作。

由于 s 指向的內(nèi)存已經(jīng)被釋放掉,強行往里面拷貝,就會出現(xiàn)意想不到的錯誤。

養(yǎng)成良好的編程習(xí)慣就是指針被釋放掉后,手動把它變成空,空指針比野指針、懸空指針更可控。

指針是C語言的精髓,如果你還是覺得模棱兩可,不妨看下這套播放量近 20 萬的指針教程,課程以及資料全部開源,看完后一定會讓你的指針?biāo)竭_到一個更高的級別。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 指針
    +關(guān)注

    關(guān)注

    1

    文章

    481

    瀏覽量

    70593
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4819

    瀏覽量

    68879

原文標(biāo)題:指針被釋放后,是不是變成了空指針

文章出處:【微信號:學(xué)益得智能硬件,微信公眾號:學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    指針式萬用表使用指南

    一、指針式萬用表簡介 指針式萬用表是一種傳統(tǒng)的電子測量工具,因其表頭指針的擺動來顯示測量結(jié)果而得名。與數(shù)字萬用表相比,指針式萬用表在某些情況下能提供更直觀的讀數(shù),尤其是在測量快速變化的
    的頭像 發(fā)表于 01-22 17:25 ?130次閱讀

    指針式萬用表測量精度比較

    指針式萬用表的核心是一個可變電阻器(分壓器)和一個可動的指針。當(dāng)測量電壓或電流時,通過分壓器的電阻值會改變,從而改變通過指針的電流,使指針在刻度盤上移動。
    的頭像 發(fā)表于 01-22 17:23 ?139次閱讀

    C語言程序設(shè)計教程第4版第8講:指針

    C語言指針講解
    發(fā)表于 11-20 14:10 ?0次下載

    C語言指針學(xué)習(xí)筆記

    本文從底層內(nèi)存分析,徹底讓讀者明白C語言指針的本質(zhì)。
    的頭像 發(fā)表于 11-05 17:40 ?278次閱讀
    C語言<b class='flag-5'>指針</b>學(xué)習(xí)筆記

    C語言指針運算符詳解

    在C語言中,當(dāng)你有一個指向數(shù)組中某個元素的指針時,你可以對該指針執(zhí)行某些算術(shù)運算,例如加法或減法。這些運算可以用來遍歷數(shù)組中的元素,如ptr[i]等價于*(ptr + i)。然而,如果你的操作使得指針指向了數(shù)組以外的位置(除了數(shù)
    的頭像 發(fā)表于 10-30 11:16 ?293次閱讀

    電流計指針偏轉(zhuǎn)方向是正極還是負極

    電流計指針的偏轉(zhuǎn)方向并非簡單地指向正極或負極,而是取決于電流的流入方向以及電流計正負極的連接方式。以下是對這一問題的分析: 一、電流流入方向與指針偏轉(zhuǎn)的關(guān)系 常規(guī)情況 : 對于常規(guī)的電流計(假設(shè)其
    的頭像 發(fā)表于 09-19 15:18 ?4418次閱讀

    C語言指針詳細解析

    可以對數(shù)據(jù)本身,也可以對存儲數(shù)據(jù)的變量地址進行操作。 指針是一個占據(jù)存儲空間的實體在這一段空間起始位置的相對距離值。在C/C++語言中,指針一般認(rèn)為是指針變量,
    發(fā)表于 09-14 10:03

    面試常考+1:函數(shù)指針指針函數(shù)、數(shù)組指針指針數(shù)組

    在嵌入式開發(fā)領(lǐng)域,函數(shù)指針、指針函數(shù)、數(shù)組指針指針數(shù)組是一些非常重要但又容易混淆的概念。理解它們的特性和應(yīng)用場景,對于提升嵌入式程序的效率和質(zhì)量至關(guān)重要。一、
    的頭像 發(fā)表于 08-10 08:11 ?973次閱讀
    面試???1:函數(shù)<b class='flag-5'>指針</b>與<b class='flag-5'>指針</b>函數(shù)、數(shù)組<b class='flag-5'>指針</b>與<b class='flag-5'>指針</b>數(shù)組

    Lombok注解引發(fā)的指針問題分析

    一、問題描述 在一次上線,日志中出現(xiàn)指針的報錯,但是報錯代碼位置以及相應(yīng)工具類未進行過修改,接下來進一步分析。 以下為報錯堆棧信息
    的頭像 發(fā)表于 06-23 09:30 ?1093次閱讀
    Lombok注解引發(fā)的<b class='flag-5'>空</b><b class='flag-5'>指針</b>問題分析

    面試中的高頻問題:指針函數(shù)與函數(shù)指針,你能完美應(yīng)對嗎?

    的內(nèi)存分析,徹底讓大家明白指針的本質(zhì)。建議大家靜下心來再復(fù)習(xí)一遍。一、指針變量首先要明白指針是一個變量,為此寫了如下代碼來驗證之:運行可以看
    的頭像 發(fā)表于 06-22 08:11 ?1811次閱讀
    面試中的高頻問題:<b class='flag-5'>指針</b>函數(shù)與函數(shù)<b class='flag-5'>指針</b>,你能完美應(yīng)對嗎?

    為什么指針之間不要隨意賦值呢?

    指針之間也不能隨意賦值。
    的頭像 發(fā)表于 03-28 17:13 ?738次閱讀
    為什么<b class='flag-5'>指針</b>之間不要隨意賦值呢?

    指針區(qū)域?qū)懭霐?shù)據(jù)會hardfault,為什么測試時讀取卻不會hardfault?

    指針區(qū)域?qū)懭霐?shù)據(jù)會hardfault,這個大家都知道, 但是測試時發(fā)現(xiàn)讀取時卻不會,這是為什么?有人知道嗎?
    發(fā)表于 03-14 08:20

    函數(shù)指針與回調(diào)函數(shù)的應(yīng)用實例

    通常我們說的指針變量是指向一個整型、字符型或數(shù)組等變量,而函數(shù)指針是指向函數(shù)。 函數(shù)指針可以像一般函數(shù)一樣,用于調(diào)用函數(shù)、傳遞參數(shù)。
    的頭像 發(fā)表于 03-07 11:13 ?424次閱讀
    函數(shù)<b class='flag-5'>指針</b>與回調(diào)函數(shù)的應(yīng)用實例

    C語言的指針用法

    C語言編程中善用指針可以簡化一些任務(wù)的處理,而對于一些任務(wù)(比如動態(tài)內(nèi)存分配),必須要有指針才行的。也就是說精通C指針編程是很有必要的,幫助你成為一名優(yōu)秀的Cer。
    發(fā)表于 03-05 14:22 ?383次閱讀
    C語言的<b class='flag-5'>指針</b>用法

    怎么理解指針指針

    怎么理解指針指針?其實這個概念并不難,只是把它放到實際應(yīng)用中,容易造成困擾。
    的頭像 發(fā)表于 02-23 16:46 ?1252次閱讀
    怎么理解<b class='flag-5'>指針</b>的<b class='flag-5'>指針</b>?