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