我正在我的 C 应用程序中试验内存错误并使用 valgrind,我在 json-c lib 周围看到了许多奇怪的东西。
所以看了网上的一些信息,我看到了这个帖子json_object_new_object
所以我有2个问题要弄清楚:第一个是关于json构造的
当我将一个对象添加到另一个对象时,我是否必须释放第一个对象?例子:
json_object * jobj1 = json_object_new_object();
json_object * jobj2 = json_object_new_object();
json_object_object_add(jobj1,"Object", jobj2);
...
json_object_put(jobj); // Is it enough to free all the json tree??
根据这篇文章,它似乎没问题,但还没有真正得到回答。
问题 2:看这个tuto,似乎没有必要释放任何东西,但看我的 valgrind 日志,json_object_new_object
被称为:
by 0x4F7F4CF: json_object_new_object (in /lib/x86_64-linux-gnu/libjson-c.so.3.0.1)
by 0x4F81B38: json_tokener_parse_ex (in /lib/x86_64-linux-gnu/libjson-c.so.3.0.1)
by 0x4F82316: json_tokener_parse_verbose (in /lib/x86_64-linux-gnu/libjson-c.so.3.0.1)
by 0x4F8237D: json_tokener_parse (in /lib/x86_64-linux-gnu/libjson-c.so.3.0.1)
那么我必须这样做吗?
json_object *jobj = json_tokener_parse(...);
...
json_object_put(jobj);