我在程序中使用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(嵌入式)会因为内存的异常使用或设备(在A8上)挂起而杀死我的程序。在调试之后,即使在结束时删除了指针,该漏洞仍然会出现在此函数中。有人能看到漏水吗?
发布于 2014-10-02 12:33:23
最初,我认为这可能是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);发布于 2015-01-22 20:48:47
对于char*已分配的cJSON_Print,据说使用cJSON_FreePrintBuffer。
https://stackoverflow.com/questions/26158734
复制相似问题