cJSON内存泄漏

Pau*_*rev 2 c json pointers memory-leaks cjson

我在程序中使用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);
}
Run Code Online (Sandbox Code Playgroud)

效果很好,但过了一段时间后我发现Linux(嵌入式)因为内存使用异常或设备(在Cortex A8上)挂起而导致程序死机.在我发现调试之后,即使我在最后删除指针,该泄漏仍然出现在此函数中.有人能看到泄漏吗?

mea*_*ers 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);
Run Code Online (Sandbox Code Playgroud)

  • 请考虑更改为 `cJSON_free` API(请参阅维护者评论 https://github.com/DaveGamble/cJSON/issues/5) (2认同)