文件
   
    json_object_new_object
   
   说
  
  
   
    记住,当使用json_object_object_add或json_object_array_put_idx时,所有权将转移到对象/数组。
   
  
  
   和
  
  
   
    您获得但未转移的任何所有权必须通过json_object_put释放。
   
  
  
   对我来说,这意味着这应该是正常的:
  
  json_object *jobj1 = json_object_new_object();
json_object *jobj2 = json_object_new_object();
json_object_object_add(jobj1, "Object", jobj2);
// ...
json_object_put(jobj1); // This is the only one we have ownership of now
  
   是的,就像文件上说的,你
   
    必须
   
   释放你所有的权利使用
   
    json_object_put
   
   .
  
  
   关于
   
    json_tokener_parse
   
   ,文档没有明确说明任何关于所有权或发布的内容,但我会
   
    非常
   
   如果不一样会很惊讶
   
    json_object_new_object
   
   在这方面。如果不允许使用从
   
    json_tokener_parse
   
   使用通过
   
    json_object_new_对象
   
   .
  
  
   例如,应该可以这样做:
  
  json_object *jobj1 = json_object_new_object();  // "Manual" object
json_object *jobj2 = json_tokener_parse(...);   // Parsed object
// At this point, jobj1->_ref_count and jobj2->_ref_count will both be 1.
// We could now add the parsed object as a new field in our "manual" one:
json_object_object_add(jobj1, "ParsedObject", jobj2); 
// ...
// In the end, we only have to release the "manual" object.
json_object_put(jobj1);
  
   而且,是的,正如你的Valgrind日志所指出的那样,
   
    JSON标记器分析
   
   函数调用
   
    json_object_new_对象
   
   在幕后,所以你需要打电话
   
    JSON-ObjutoPoT
   
   对于返回的对象(即,除非您将其合并到另一个对象或数组中,如前所述)。
  
  
   在引用文件中编写代码的人
   
    blog post
   
   似乎不关心程序中的内存泄漏,也许是因为该程序非常简单,只处理一个对象后立即结束。