【发布时间】:2020-08-03 04:40:09
【问题描述】:
我知道我们可以使用函数json_object_put()来释放struct json_object的指针。但是当我在每次调用声明和使用它的函数后尝试释放指向该结构的指针时,我遇到了问题。该程序将在 while 循环的第二个迭代器中为 Segmentation fault (core dumped),因为我在 test_json 函数中使用了 json_object_put(obj1);。
#include <stdio.h>
#include <stdlib.h>
#include <json-c/json.h>
struct json_object * parse_object;
void init() {
char buffer_file[] = "{ \"object\": {\"array1\": [1, 2, 3], \"array2\": [4, 5, 6] } }";
parse_object = json_tokener_parse(buffer_file);
}
void test_json() {
struct json_object * obj1, * arr1;
json_object_object_get_ex(parse_object, "object", &obj1);
json_object_object_get_ex(obj1, "array1", &arr1);
int size = json_object_array_length(arr1);
printf("size = %d \n", size);
json_object_put(obj1);
}
int main(int argc, char const *argv[]) {
int j = 0;
int max = 4;
init();
while(++j < max) {
test_json();
}
json_object_put(parse_object);
return 0;
}
我可以在主函数中只使用json_object_put(parse_object); 来释放所有json_object,但是如果我将max 的值增大到很大(例如1000000),在我调用@ 之前泄漏内存会变得非常多987654332@.
那么,在这种情况下,如何释放json_object (obj1) (parse_object 始终是一个全局变量) 呢?如果不可能,请提供另一种从 c 中的 json 文件获取信息的解决方案。
struct json_object文档的链接
【问题讨论】:
-
我认为我的回答和@mattefrank 的回答一起很好地分析了正在发生的事情。如果他们回答您的问题,请接受他们的回答,而不是我的,因为如果没有他们的回答,我将没有足够的信息来发布我的问题。
标签: c json memory-leaks segmentation-fault free