jansson json_decref意外行为

时间:2018-05-18 14:34:21

标签: c jansson

我正在将jansson库用于C项目。

我在理解如何使用减压方面遇到了一些问题。是否可以在每个新的json_t参数之后使用它?据我所知,jansson将借用引用来使这更简单。

如果我运行此程序并检查a_id和a_test的值,它们是相同的。我期望a_test的错误或null。

我尝试了相同的想法,但后来我为json_acc和json_param添加了convf,但它在我甚至可以读取第1个值之前崩溃了。我假设崩溃但直到a_test。

这是一个更大项目的一部分,但我尝试添加一个示例来展示基本要素。

API方面:

json_t* parObj;

void loadFile(char* path)
{
    json_error_t error;
    parObj = json_load_file(path, 0, &error);
}

int getAccountId(char* id)
{
    json_t* json_acc = json_object_get(parObj, "accounts");
    json_t* json_param = json_object_get(json_acc, id);
    return json_integer_value(json_param);
}

void cleanJson()
{
    json_decref(parObj);
}

来电方:

loadFile("/home/jacob/accountDump.json");
int a_id = getAccountId("10");
cleanJson();
int a_test = getAccountId("10");

1 个答案:

答案 0 :(得分:1)

我确实误解了它应该如何工作,我认为decref也会将内存设置为零。

API会删除这些引用并使其成为空闲内存,但是只要没有人将其写入或将其内存设置为零并且指针未设置为null,我仍然可以从该指针读取值。