從原理到方法,一文講清如何應(yīng)對(duì)C語(yǔ)言內(nèi)存泄露!
內(nèi)存泄漏問(wèn)題原理
堆內(nèi)存在C代碼中的存儲(chǔ)方式
char *info = NULL; /**轉(zhuǎn)換后的字符串**/
info = (char*)malloc(NB_MEM_SPD_INFO_MAX_SIZE);
if( NULL == info)
{
(void)tdm_error("malloc error!\n");
return NB_SA_ERR_HPI_OUT_OF_MEMORY;
}
堆內(nèi)存的獲取方法
char *local_pointer_xx = NULL;
local_pointer_xx = (char*)function_xx(para_xx, …);
GSList* g_slist_append (GSList *list, gpointer data)
int ret;
char *local_pointer_xx = NULL; /**轉(zhuǎn)換后的字符串**/
ret = (char*)function_xx(..., &local_pointer_xx, ...);
__STDIO_INLINE _IO_ssize_t
getline (char **__lineptr, size_t *__n, FILE *__stream)
內(nèi)存泄漏三要素
要素一:函數(shù)內(nèi)有局部指針變量定義;
要素二:對(duì)該局部指針有通過(guò)上一小節(jié)中“兩種堆內(nèi)存獲取方法”之一獲取內(nèi)存;
要素三:在函數(shù)返回前(含正常分支和異常分支)未釋放該內(nèi)存,也未保存到其它全局變量或返回給上一級(jí)函數(shù)。
內(nèi)存釋放誤區(qū)
dfl_get_object_list(const char* class_name, GSList **list)
內(nèi)存泄漏問(wèn)題檢視方法
-END-
來(lái)源 |?華為云社區(qū)
作者 | 技術(shù)火炬手
|?整理文章為傳播相關(guān)技術(shù),版權(quán)歸原作者所有?|
|?如有侵權(quán),請(qǐng)聯(lián)系刪除?|
【1】C語(yǔ)言進(jìn)階技術(shù):同事這些操作把我驚呆了!
【2】初學(xué)者:如何學(xué)好C語(yǔ)言?
【3】推薦給初學(xué)者的箴言:如何學(xué)好C語(yǔ)言
【4】C語(yǔ)言與C++40 年的愛恨情仇!
【5】C語(yǔ)言中的短路現(xiàn)象
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!