91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

3天內不再提示

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

學益得智能硬件 ? 來源:學益得智能硬件 ? 2025-01-22 09:23 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

#include 


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


    strcpy(s, "helloworld");


free(s);


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


    return 0;
}

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

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

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

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

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

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

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

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

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

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

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

    關注

    1

    文章

    484

    瀏覽量

    71864
  • 代碼
    +關注

    關注

    30

    文章

    4968

    瀏覽量

    74009

原文標題:指針被釋放后,是不是變成了空指針

文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    傳遞一個無符號的 long 型指針給函數(shù)

    C語言允許傳遞指針給函數(shù),只需要簡單地聲明函數(shù)參數(shù)為指針類型即可。 下面的實例中,我們傳遞一個無符號的 long 型指針給函數(shù),并在函數(shù)內改變這個值: 實例 #include #include
    發(fā)表于 01-27 11:51

    指針與函數(shù)詳解

    函數(shù)的最大區(qū)別是函數(shù)指針的函數(shù)名是一個指針,即函數(shù)名前面有一個指針類型的標志型號“*”。 注意指針函數(shù)與函數(shù)指針表示方法的不同,千萬不要混淆
    發(fā)表于 01-23 06:02

    C語言重點—指針

    個字節(jié)大?。?,在讓變量指向這篇空間,即就是這片空間屬于這個變量,再在這片空間中存儲你要存儲的數(shù)值。 三. 指針類型(int *)的存儲過程和原理3.1 指針類型的賦值規(guī)范(1) 第一種先定義賦值
    發(fā)表于 01-22 08:23

    函數(shù)指針介紹

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

    值傳遞、指針傳遞、引用傳遞介紹

    進行操作,也就是說,即使形參的值發(fā)生改變,實參的值也完全不受影響。   2、指針傳遞:指針傳遞其實是值傳遞的一種,它傳遞的是地址。值傳遞過程中,調函數(shù)的形參作為調函數(shù)的局部變量來處
    發(fā)表于 01-21 06:48

    函數(shù)指針與回調函數(shù)解讀

    是,在程序執(zhí)行期間可以動態(tài)更改調用的回調函數(shù)。 一、函數(shù)指針函數(shù)指針,顧名思義它就是一個指針,只不過它是一個函數(shù)指針,所以指向的是一個函數(shù)
    發(fā)表于 01-19 07:34

    指針難學的4點原因分析

    難點1. 討厭的星號 定義指針變量p時,都會加個*號。在用到指針變量p時,也會加個*號。比如以下代碼: int main() { int *p; p = malloc(sizeof(int
    發(fā)表于 01-16 06:12

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

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

    指針的基礎

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

    函數(shù)指針指針函數(shù)的區(qū)別

    = fun(a);   注意指針函數(shù)與函數(shù)指針表示方法的不同,千萬不要混淆。最簡單的辨別方式就是看函數(shù)名前面的指針*號有沒有括號()包含,如果
    發(fā)表于 12-12 06:34

    函數(shù)指針的概念

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

    如何用函數(shù)指針調用函數(shù)

    給大家舉一個例子: int Func(int x);/*聲明一個函數(shù)*/ int (*p) (int x);/*定義一個函數(shù)指針*/ p = Func; /*將Func函數(shù)的首地址賦給指針變量
    發(fā)表于 12-11 06:26

    C指針的妙用分享

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

    rt_tick_increase 引用指針變量未判斷其是否為

    指針變量使用之前沒有判斷是否為,萬一rt_system_scheduler_start此函數(shù)調用之前來滴答定時器的中斷了,這樣操作是不是會有風險
    發(fā)表于 10-09 08:07

    函數(shù)指針的六個常見應用場景

    函數(shù)指針在嵌入式開發(fā)中有著廣泛的應用,它讓代碼更加靈活,減少冗余,提高可擴展性。很多時候,我們需要根據(jù)不同的情況動態(tài)調用不同的函數(shù),而函數(shù)指針正是實現(xiàn)這一需求的重要工具。本文將介紹六個常見的函數(shù)指針
    的頭像 發(fā)表于 04-07 11:58 ?1489次閱讀
    函數(shù)<b class='flag-5'>指針</b>的六個常見應用場景