精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

C語言中申請的堆內存能不能自動釋放

學益得智能硬件 ? 來源:學益得智能硬件 ? 2024-11-27 09:33 ? 次閱讀

C語言中申請的堆內存能不能自動釋放?每次都要手動 free 太麻煩,也容易忘記。

學過 C++ 的同學,應該首先能想到智能指針。

但是這是C語言,沒有類和對象、構造析構這些技術,想要自動釋放很難。

下面給大家介紹一種黑科技

之前我們講過 GNU 的 attribute 屬性,里面可以是 packed unused 等等,還有一個,叫 cleanup。

cleanup的作用就是當其聲明的變量離開了生命周期,就會調用指定的函數。

這剛好滿足了我們的要求。

比如這樣的代碼,給 str 申請了內存,但是整個代碼中也沒有釋放,妥妥的內存泄漏。

定義 str 的時候,可以在后面加上 attribute cleanup,指定函數 func,意思就是,當變量 str 生命周期結束的時候,會調用 func 函數。換句話說,只要 main 函數結束了,就會調用 func 函數。

func 函數有個參數,是變量 str 的地址,可以寫成 char ** 類型,在函數的內部可以釋放剛才申請的堆內存。

這樣在 main 函數結束的時候,就會自動調用 func 函數釋放堆內存,有點智能指針的意思。

有了 func 函數,在任意地方定義指針,只要加上 attribute 屬性,函數運行結束,就能自動釋放堆內存。

attribute 屬性并不是 C 標準內容,屬于 GNU 擴展功能,不過也不排除后面被加到標準里面的可能性。

了解一下就行,不建議使用,太過于冷門。

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

    關注

    8

    文章

    3004

    瀏覽量

    73897
  • C語言
    +關注

    關注

    180

    文章

    7601

    瀏覽量

    136244
  • 函數
    +關注

    關注

    3

    文章

    4308

    瀏覽量

    62442

原文標題:堆內存也能自動釋放

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

收藏 人收藏

    評論

    相關推薦

    C語言中的頭文件能不能重復包含

    C語言中的頭文件能不能重復包含? 比如代碼寫成這樣,stdio.h 連續包含了兩次。 #include #include int main(){ printf("helloworld
    的頭像 發表于 11-26 17:19 ?77次閱讀

    使用C語言實現函數模板

      用C語言能不能實現一個通用的函數,既能完成整數的相加,又能完成浮點數的相加?
    的頭像 發表于 11-09 11:38 ?299次閱讀

    C語言中的socket編程基礎

    Socket編程簡介 Socket是一種通信機制,允許程序之間進行通信。在C語言中,socket編程是網絡編程的基礎。通過使用socket,程序可以發送和接收數據,實現不同計算機之間的通信
    的頭像 發表于 11-01 16:51 ?247次閱讀

    一體成型電感外殼破損還能不能

    電子發燒友網站提供《一體成型電感外殼破損還能不能用.docx》資料免費下載
    發表于 10-31 10:57 ?0次下載

    UTB定位技術能不能精準定位

    在當今科技日新月異的時代,定位技術以其廣泛的應用場景和不斷提升的精度,成為了多個領域的核心支撐。其中,UTB定位技術以其高精度、低延遲和高抗干擾性等特點,在眾多定位技術中脫穎而出,成為精準定位領域的佼佼者。那么,UTB定位技術到底能不能精準定位呢?下面就給大家具體介紹一下關于UTB定位技術。
    的頭像 發表于 09-03 10:07 ?279次閱讀

    請問esp32能不能自動找到信號最強的wifi ap進行連接?

    你好,我的設置好多wifi ap 熱點,他們的ssid 和密碼 都是相同。請問 esp32 能不能自動找到信號最強的wifi ap 進行連接。謝謝。
    發表于 06-13 07:33

    C語言中,同一個函數能不能被定義兩次?

    稍微有點C語言基礎的同學,一定知道不能這樣做。
    的頭像 發表于 05-11 18:27 ?1596次閱讀

    C語言內存泄漏問題原理

    內存泄漏問題只有在使用內存的時候才會出現,棧內存不存在內存泄漏問題,因為棧內存
    發表于 03-19 11:38 ?492次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>內存</b>泄漏問題原理

    C語言中的動態內存管理講解

    本章將講解 C 中的動態內存管理。C 語言內存的分配和管理提供了幾個函數。這些函數可以在 頭文件中找到。
    的頭像 發表于 02-23 14:03 ?375次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言中</b>的動態<b class='flag-5'>內存</b>管理講解

    同VLAN不同的網段能不能互通?

    同VLAN不同的網段能不能互通? 同一個VLAN中的設備擁有相同的網絡地址范圍,因此它們可以通過該VLAN進行通信。而不同VLAN中的設備擁有不同的網絡地址范圍,它們通常不能直接互通。然而,在某些
    的頭像 發表于 02-04 11:21 ?2958次閱讀

    如何解決C語言中的“訪問權限沖突”異常?C語言引發異常原因分析

    如何解決C語言中的“訪問權限沖突”異常?C語言引發異常原因分析? 在C語言中,訪問權限沖突異常通
    的頭像 發表于 01-12 16:03 ?5174次閱讀

    DC2100B/A能不能支持MATLAB/simulink自動代碼生成?

    1、硬件方面,微控制器是主要有幾種,計算能力如何,可以支持類似MPC的算法嗎?能不能擴展DSP的控制器? 2、軟件方面,能不能支持MATLAB/simulink自動代碼生成?
    發表于 01-11 06:56

    pcb壓合緩沖墊,究竟能不能讓你的電路板更安全?

    pcb壓合緩沖墊,究竟能不能讓你的電路板更安全?
    的頭像 發表于 12-27 10:13 ?843次閱讀

    C語言中結構體能不能相加

    C語言中,結構體能不能相加?
    的頭像 發表于 12-19 17:04 ?1221次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言中</b>結構體<b class='flag-5'>能不能</b>相加

    c語言中decimal的含義

    C語言中的“decimal”是一種數據類型,用于表示十進制數字。在C語言中,常用的數據類型有整數類型(int)、浮點類型(float和double)、字符類型(char)等,而deci
    的頭像 發表于 11-30 10:57 ?2314次閱讀