3

我在我的程序中使用 cJSON 将我的值转换为 JSON 并将其写入文件。这是我的代码示例:

void writeStructToFile(IOPipe this, struct structtype somevalues) {
    cJSON *jout = cJSON_CreateObject();
    cJSON_AddItemToObject(jout, "V1", cJSON_CreateNumber(somevalues.v1));
    cJSON_AddItemToObject(jout, "V2", cJSON_CreateNumber(somevalues.v2));
    fprintf(this->outstream, "%s", cJSON_Print(jout));
    cJSON_Delete(jout);
}

效果很好,但一段时间后我发现 Linux(嵌入式)由于内存使用异常或设备(在 Cortex A8 上)挂起而杀死了我的程序。调试后我发现,即使我在最后删除了指针,泄漏也完全出现在这个函数中。谁能看到那个泄漏?

4

2 回答 2

7

最初我认为它可能是FILEI/O 的内部缓冲区。但是当它们变得太大时,它们会自动刷新。

真正的泄漏是cJSON_Print分配内存:一个char数组。完成后你必须释放它:

char* text = cJSON_Print(jout);
fprintf(this->outstream, "%s", text);
free(text);  // As suggested by PaulPonomarev.

cJSON_Delete(jout);
于 2014-10-02T12:33:23.833 回答
-2

对于 char* 分配的 cJSON_Print,据说使用 cJSON_FreePrintBuffer。

于 2015-01-22T20:48:47.437 回答