stm32 移植cJson 注意free釋放內(nèi)存
關(guān)于怎么移植的網(wǎng)上有很多參考文檔,也很簡(jiǎn)單,因?yàn)閏json只有2個(gè)文件,一個(gè)cJSON.c 一個(gè)cJSON.h文件。
我用的是原子的stm32 工程文件測(cè)試,他們有自己定義的malloc.cmalloc.h,很方便可以直接用。
需要修改的就是下面:把原本的json malloc 和free替換成我們自己的,如下代碼
staticvoid*(*cJSON_malloc)(size_tsz)=malloc;staticvoid(*cJSON_free)(void*ptr)=free;----------------------------------------
void *(*cJSON_malloc)(size_t sz) = mymalloc;
void (*cJSON_free)(void *ptr) = myfree;
[cpp]view plaincopy
voidcJSON_InitHooks(cJSON_Hooks*hooks)
{
if(!hooks)
{
cJSON_malloc=malloc;
cJSON_free=free;
return;
}
//cJSON_malloc=(hooks->malloc_fn)?hooks->malloc_fn:malloc;
//cJSON_free=(hooks->free_fn)?hooks->free_fn:free;
cJSON_malloc=(hooks->malloc_fn)?hooks->malloc_fn:mymalloc;
cJSON_free=(hooks->free_fn)?hooks->free_fn:myfree;
}
通過(guò)上面這樣修改就可以運(yùn)行例子了。
代碼運(yùn)行可以,但是有個(gè)問(wèn)題要注意:
我們?cè)?運(yùn)行p=cJSON_Print(root);
后務(wù)必要要進(jìn)行如下釋放操作
cJSON_Delete(root);
free(p)
關(guān)于free這點(diǎn)特別加粗注意,我被這個(gè)問(wèn)題困擾兩天,默認(rèn)網(wǎng)上的介紹都是這樣寫的,編譯代碼也沒(méi)要出現(xiàn)錯(cuò)誤。
其實(shí)不對(duì)的,應(yīng)該使用myfree(p); 這個(gè)函數(shù)才能給真正釋放內(nèi)存,要不然程序跑幾分鐘就卡死了,這個(gè)特別要注意。喜歡做驗(yàn)證的朋友可以自己測(cè)試下。
這問(wèn)題不容易發(fā)現(xiàn),我?guī)缀蹩旆艞塩json了。還好最后解決了。