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); } 

效果很好,但过了一段时间后,我发现Linux(嵌入式)因为内存使用exception或设备(在Cortex A8上)挂起而导致程序死机。 我发现调试后,即使我在结尾处删除指针,该泄漏也会出现在此函数中。 谁能看到泄漏?

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

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

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

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