來分析一個C語言代碼結構的設計問題。
這段代碼,使用了兩次malloc,分別給 p1 和 p2 申請了內存。用完后,內存釋放,防止內存泄漏。
大家覺得,這樣的代碼設計有沒有問題。
代碼是某位學員在項目中遇到的,我拿過來給簡化了一下。
其實這樣的代碼可能會導致內存泄漏,如果第一個 malloc 申請成功,第二個 malloc 申請失敗,直接 return -1 退出函數,就會導致前面申請的內存沒有釋放,長期運行,極有可能導致安全隱患。
對于這種連續初始化的代碼,一旦某個初始化失敗,應該要考慮到如何釋放前面已經申請的資源。
最簡單的方法,就是在 return 退出之前,把前面的資源清理掉。
不過這種方法,越往下初始化越多,退出的時候需要釋放的也就越多,重復的代碼也會很多。
或者使用 do while 語句,把代碼放在循環里面,初始化失敗后,直接跳出循環,不需要再進行下面的初始化,然后統一在某個地方釋放資源。
類似的還有 goto 語句,也是把釋放資源統一處理。
大家還有沒有其他更好的辦法,如果你也遇到過,歡迎在評論區交流。
-
C語言
+關注
關注
180文章
7630瀏覽量
140741 -
代碼
+關注
關注
30文章
4891瀏覽量
70365
原文標題:分析一個隱藏的內存泄漏問題
文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
為什么學了C語言,卻寫不出像樣的項目?

源代碼加密、源代碼防泄漏c/c++與git服務器開發環境

AKI跨語言調用庫神助攻C/C++代碼遷移至HarmonyOS NEXT
技術干貨驛站 ▏深入理解C語言:掌握C語言條件判斷,從if到switch的應用

C語言與Java語言的對比
TMS320LF240x DSP的C語言和匯編代碼快速入門

技術干貨驛站 ▏深入理解C語言:編程高手必備,全方位解析運算符的核心技能!

評論