首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cJSON内存泄漏

cJSON内存泄漏
EN

Stack Overflow用户
提问于 2014-10-02 10:14:56
回答 2查看 6.3K关注 0票数 3

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

代码语言:javascript
复制
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上)挂起而杀死我的程序。在调试之后,即使在结束时删除了指针,该漏洞仍然会出现在此函数中。有人能看到漏水吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-02 12:33:23

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

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

代码语言:javascript
复制
char* text = cJSON_Print(jout);
fprintf(this->outstream, "%s", text);
free(text);  // As suggested by PaulPonomarev.

cJSON_Delete(jout);
票数 7
EN

Stack Overflow用户

发布于 2015-01-22 20:48:47

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

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26158734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档