我在程序中使用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上)挂起而导致程序死机。在我发现调试之后,即使我在最后删除指针,该泄漏仍然出现在此函数中。有人能看到泄漏吗?
答案 0 :(得分:7)
最初我认为它可能是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);
答案 1 :(得分:-2)
对于char *分配的cJSON_Print,据说使用cJSON_FreePrintBuffer。