В соответствии с примером на GitHub Json - C, документация которого, я должен признать, не очень ясна, кажется, что
int json_object_put(struct json_object *jso);
никогда не вызывается , когда struct json_object
получен посредством вызова json_tokener_parse()
. Это скорее используется, когда он был получен через один из этих вызовов
jobj = json_object_new_object();
res = json_object_new_array();
Это заставляет меня думать, что с
int test_json() {
struct json_object * obj1, * arr1;
json_object_object_get_ex(parse_object, "object", &obj1);
/* ... */
json_object_put(obj1);
return size;
}
каким-то образом вы освободили всю выделенную память с помощью json_object_put(obj1);
потому что obj1
был единственным объектом, который должен быть освобожден, и ничего не осталось в parse_object
.
Моя гипотеза состоит в том, что json_object_put(obj1);
из всех объектов, полученных с json_tokener_parse()
, один за другим, является альтернативным на один вызов json_object_put(parse_object);
в конце.
@ mattefrank анализ подтверждает эту гипотезу.