使用Cjson解析造成內存溢出的解決辦法

最近使用cjson解析json數據,在使用過程中發現有很多網友說運行一段時間,會造成內存申請失敗,死機等情況,我也遇到了內存申請失敗的問題,後來發現瞭如下幾個問題

1.申請了內存沒有釋放 造成內存申請失敗,下面記錄下使用的注意問題

(1)使用root = cJSON_Parse(text); //將文本轉成json格式,次函數裏面申請了一塊內存給root  所以在最後要釋放root

 cJSON_Delete(root ); //釋放cJSON_Parse()分配出來的內存空間

(2)使用out = cJSON_Print(root);//次函數將json數據轉成字符串,這個函數內申請了一段內存給out,所以使用完out後也要釋放

由於out不是json指針的數據格式所以使用cJSON_free(out);釋放就可以,不要使用free,官方給的示例使用free,但是我們自己使用的時候可能已經移植了cjson到不同的平臺,free就不一定適用。

(3)使用cJSON *new_json_str = cJSON_CreateString(str);//將一個字符串轉成一個json對象,函數裏面也涉及了內存分配,座椅用完以後也要釋放cJSON_Delete(new_json_str );

暫時只用到上面幾條,所以就發現了這幾個,如果有朋友知道可以留言補充。總之就是在使用cjson函數時一定要看看函數內有沒有涉及到內存申請,如果有在使用完以後一定釋放。這樣cjson用起來還是很方便的。

2.內存申請後內存指針變動,在釋放的時候指針有偏移,造成內存釋放不徹底,這種情況我沒有仔細去測試,只是在原子論壇看到有網友這樣解決的,也一起記錄下來:鏈接http://www.openedv.com/forum.php?mod=viewthread&tid=229818&page=3

可以通過這個帖子瞭解

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章