chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

簡述C語言中的內(nèi)存泄漏的原理及解決方法

Q4MP_gh_c472c21 ? 來源:金橙智能 ? 作者:金橙智能 ? 2021-06-29 14:58 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

內(nèi)存泄漏的原理

只有在堆內(nèi)存里面才會發(fā)生內(nèi)存泄漏的問題,在棧內(nèi)存中不會發(fā)生內(nèi)存泄漏。因為棧內(nèi)存在自動分配空間之后,還會自動釋放空間。

什么是堆內(nèi)存?存儲方式是什么樣的呢?

首先我們先來介紹一下堆內(nèi)存在C代碼中的存儲方式。C代碼中動態(tài)申請堆內(nèi)存的申請函數(shù)是malloc,常見的內(nèi)存代碼如下圖所示:

d6d6bf80-d8a6-11eb-9e57-12bb97331649.png

因為malloc函數(shù)返回值是一個內(nèi)存地址,所以保存堆內(nèi)存的變量一定得是一個指針,當然這個變量可以是一個單指針,也可以是一個多重指針。

如何獲取堆內(nèi)存?

對于堆內(nèi)存的獲取方法,我們可以有兩種方法,第一種是用返回值傳遞內(nèi)存指針,第二種方法是通過參數(shù)傳遞給內(nèi)存指針。上面我們用到的malloc申請內(nèi)存,就是屬于方法一的一種具體表現(xiàn)形式,是直接把返回值傳遞給內(nèi)存指針。

方法一:把函數(shù)返回值直接賦值給指針,一般表現(xiàn)形式如下:

d6e7fce6-d8a6-11eb-9e57-12bb97331649.png

方法二:將指針地址作為函數(shù)返回參數(shù),通過返回參數(shù)保存堆內(nèi)存地址,一般表現(xiàn)形式如下:

d6f30ea6-d8a6-11eb-9e57-12bb97331649.png

總結:這兩類方法的本質(zhì)是一樣的,都是函數(shù)內(nèi)存間接申請了內(nèi)存,但是只有傳遞內(nèi)存的方法不一樣,方法一是通過返回值傳遞內(nèi)存指針,方法二是通過參數(shù)傳遞內(nèi)存指針。

內(nèi)存泄漏的三個原因

當我們的代碼出現(xiàn)內(nèi)存泄漏的時候,一般都會包含以下幾個原因:1、函數(shù)內(nèi)有局部指針變量定義;2、對該局部指針有獲取內(nèi)存的操作;3、在函數(shù)返回前沒有釋放該內(nèi)存,也未保存到其他全局變量或返回上一級函數(shù)。

如何檢查內(nèi)存泄漏

為了避免檢查內(nèi)存泄漏,我們還是要養(yǎng)成良好的編碼習慣。當我們要進行檢查內(nèi)存泄漏問題的時候,一般要做到以下三點:

(1)當我們在函數(shù)中看到有局部指針的時候,一定要仔細檢查是否有存泄漏的問題發(fā)生,養(yǎng)成仔細檢查的習慣;

(2)如果有局部變量,并且有對局部變量賦值的操作,要檢查函數(shù)的返回的指針到底是指向什么?是全局變量、靜態(tài)數(shù)據(jù)還是堆內(nèi)存?如果代碼中有不熟悉的接口,要找到對應接口文檔或源代碼分析,保證不要出現(xiàn)不必要的錯誤;

(3)如果函數(shù)中有對局部指針有內(nèi)存申請的操作,那么要檢查被保存的是全局變量嗎?會被作為函數(shù)返回值嗎?如果都不是的話,那要排查函數(shù)所有的“return”的地方,要保證內(nèi)存被正確釋放,不占用內(nèi)存。

編輯:jq

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

    關注

    3

    文章

    4380

    瀏覽量

    64850
  • 代碼
    +關注

    關注

    30

    文章

    4900

    瀏覽量

    70719
  • C代碼
    +關注

    關注

    1

    文章

    90

    瀏覽量

    14777

原文標題:一篇文章幫你解決C語言中的內(nèi)存泄漏問題

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    Windows環(huán)境下32位匯編語言中文資料

    電子發(fā)燒友網(wǎng)站提供《Windows環(huán)境下32位匯編語言中文資料.rar》資料免費下載
    發(fā)表于 06-30 15:14 ?0次下載

    在OpenVINO? C++代碼中啟用 AddressSanitizer 時的內(nèi)存泄漏怎么解決?

    在 OpenVINO? C++代碼中啟用 AddressSanitizer 時遇到內(nèi)存泄漏: \"#0 0xaaaab8558370 in operator new(unsigned
    發(fā)表于 06-23 07:16

    深入理解C語言C語言循環(huán)控制

    改變程序的執(zhí)行流程,使代碼更加靈活和可控。本文將詳細介紹這些語句的作用及其應用場景,并通過示例代碼進行說明。Part.1break語句C語言中break語句有兩種
    的頭像 發(fā)表于 04-29 18:49 ?1138次閱讀
    深入理解<b class='flag-5'>C</b><b class='flag-5'>語言</b>:<b class='flag-5'>C</b><b class='flag-5'>語言</b>循環(huán)控制

    C語言中結構體與聯(lián)合體的深度解析:內(nèi)存布局與應用場景

    一、基礎概念與核心差異 1.1 結構體(Struct)的本質(zhì) **結構體是C語言中實現(xiàn)數(shù)據(jù)封裝的基石,其核心特征在于內(nèi)存獨立性。每個成員變量在內(nèi)存中按聲明順序依次排列,形成連續(xù)的
    發(fā)表于 04-08 09:18

    快速搞懂C語言程序內(nèi)存分區(qū)!

    到動態(tài)分配的數(shù)據(jù)等內(nèi)容。(內(nèi)存分區(qū)圖示)理解這些內(nèi)存分區(qū)的結構和特性,不僅有助于編寫更高效的代碼,還能幫助排查和解決如段錯誤、內(nèi)存泄漏、棧溢出等常見問題。以下是常見的六
    的頭像 發(fā)表于 03-14 17:37 ?662次閱讀
    快速搞懂<b class='flag-5'>C</b><b class='flag-5'>語言</b>程序<b class='flag-5'>內(nèi)存</b>分區(qū)!

    內(nèi)存泄漏檢測工具Sanitizer介紹

    內(nèi)存泄漏,我們經(jīng)常會遇到,如何檢測內(nèi)存泄漏,除了我們之前講過的 valgrind,還可以使用 gcc 自帶的工具 sanitizer。
    的頭像 發(fā)表于 03-01 14:52 ?715次閱讀

    分析C語言代碼結構的設計問題

    來分析一個C語言代碼結構的設計問題。 這段代碼,使用了兩次malloc,分別給 p1 和 p2 申請了內(nèi)存。用完后,內(nèi)存釋放,防止內(nèi)存
    的頭像 發(fā)表于 02-11 09:31 ?367次閱讀

    EE-62:在C語言中訪問短字內(nèi)存

    電子發(fā)燒友網(wǎng)站提供《EE-62:在C語言中訪問短字內(nèi)存.pdf》資料免費下載
    發(fā)表于 01-07 14:02 ?0次下載
    EE-62:在<b class='flag-5'>C</b><b class='flag-5'>語言中</b>訪問短字<b class='flag-5'>內(nèi)存</b>

    EE-128:C語言中的DSP:從C調(diào)用匯編類成員函數(shù)

    電子發(fā)燒友網(wǎng)站提供《EE-128:C語言中的DSP:從C調(diào)用匯編類成員函數(shù).pdf》資料免費下載
    發(fā)表于 01-07 13:48 ?0次下載
    EE-128:<b class='flag-5'>C</b><b class='flag-5'>語言中</b>的DSP:從<b class='flag-5'>C</b>調(diào)用匯編類成員函數(shù)

    C語言中申請的堆內(nèi)存能不能自動釋放

    C語言中申請的堆內(nèi)存能不能自動釋放?每次都要手動 free 太麻煩,也容易忘記。 學過 C++ 的同學,應該首先能想到智能指針。 但是這是C
    的頭像 發(fā)表于 11-27 09:33 ?518次閱讀

    RAM內(nèi)存不足的表現(xiàn)及解決方法

    RAM內(nèi)存不足的表現(xiàn)及解決方法 一、RAM內(nèi)存不足的表現(xiàn) 系統(tǒng)運行緩慢 當RAM內(nèi)存不足時,計算機的響應速度會明顯下降,打開程序或文件需要更長的時間。 頻繁的頁面交換(Page Swa
    的頭像 發(fā)表于 11-11 09:53 ?4534次閱讀

    技術干貨驛站 ▏深入理解C語言:掌握C語言條件判斷,從if到switch的應用

    語句和條件運算符。這些結構不僅增強了代碼的靈活性,還提高了程序的可讀性和可維護性。本文將深入探討C語言中的主要條件判斷語句,包括它們的語法、使用方法及實際應用,通過
    的頭像 發(fā)表于 11-09 01:10 ?864次閱讀
    技術干貨驛站 ▏深入理解<b class='flag-5'>C</b><b class='flag-5'>語言</b>:掌握<b class='flag-5'>C</b><b class='flag-5'>語言</b>條件判斷,從if到switch的應用

    C語言中的socket編程基礎

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

    c語言中從左到右結合怎么看

    C語言中,操作符的結合性(Associativity)是指當操作符在表達式中連續(xù)出現(xiàn)時,它們?nèi)绾闻c操作數(shù)結合的順序。對于大多數(shù)二元操作符(即需要兩個操作數(shù)的操作符),C語言遵循兩種基
    的頭像 發(fā)表于 08-20 11:42 ?1668次閱讀

    如何檢測內(nèi)存泄漏

    檢測內(nèi)存泄漏是軟件開發(fā)過程中一項至關重要的任務,它有助于識別和解決那些導致程序占用過多內(nèi)存資源,從而影響程序性能甚至導致程序崩潰的問題。以下將詳細闡述幾種常見的內(nèi)存
    的頭像 發(fā)表于 07-30 11:50 ?3489次閱讀