stm32 移植cJson 注意free釋放內(nèi)存
關(guān)于怎么移植的網(wǎng)上有很多參考文檔,也很簡單,因為cjson只有2個文件,一個cJSON.c 一個cJSON.h文件。
我用的是原子的stm32 工程文件測試,他們有自己定義的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;
}
通過上面這樣修改就可以運行例子了。
代碼運行可以,但是有個問題要注意:
我們在 運行p=cJSON_Print(root);
后務(wù)必要要進行如下釋放操作
cJSON_Delete(root);
free(p)
關(guān)于free這點特別加粗注意,我被這個問題困擾兩天,默認網(wǎng)上的介紹都是這樣寫的,編譯代碼也沒要出現(xiàn)錯誤。
其實不對的,應(yīng)該使用myfree(p); 這個函數(shù)才能給真正釋放內(nèi)存,要不然程序跑幾分鐘就卡死了,這個特別要注意。喜歡做驗證的朋友可以自己測試下。
這問題不容易發(fā)現(xiàn),我?guī)缀蹩旆艞塩json了。還好最后解決了。