使用Cjson解析造成記憶體溢位的解決辦法

2021-10-03 16:34:30 字數 700 閱讀 6297

最近使用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 );

2.記憶體申請後記憶體指標變動,在釋放的時候指標有偏移,造成記憶體釋放不徹底,這種情況我沒有仔細去測試,只是在原子論壇看到有網友這樣解決的,也一起記錄下來:鏈結

可以通過這個帖子了解

使用cJSON庫解析JSON

cjson是乙個基於c的json解析庫,這個庫非常簡單,只有cjson.c和cjson.h兩個檔案,支援json的解析和封裝,需要呼叫時,只需要 include cjson.h 就可以使用了,json官方 json json字串 這個json物件只有兩個鍵值對,鍵name對應字串andy,鍵age對...

CJson使用(構造和解析)

cjson,目前來說,就只有兩個檔案,乙個cjson.c 乙個cjson.件。工程裡新增這兩個檔案就可以使用cjson構造或者解析相應的檔案。cjson cjson createobject 建立乙個json物件,返回乙個cjson結構體型別的指標。cjson cjson createarray 建...

C JSON資料解析 jsoncpp的使用

由於工作中需要用到json資料,所以解析json資料就成了乙個非常重要的工作內容。其實用c 解析資料是很繁雜的任務,涉及到很多的資料處理和資料安全問題。好在網上提供了很多的json解析庫,其中不乏很優秀的,出於效率,還是使用這些第三方的庫比較好。我使用的是jsoncpp,這是乙個開源的c 的json...