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

cJSON内存泄漏
EN

Stack Overflow用户
提问于 2015-09-10 23:11:46
回答 3查看 1.2K关注 0票数 0

cJSON memory leak是发生内存泄漏的post。但本例中的问题是cJSON_Print()函数。

我甚至没有使用这个函数(我暂时对它进行了注释),并且仍然存在内存泄漏。我的颂歌是这样的

代码语言:javascript
复制
void myFunc(cJSON* ptr)
{
    /*some code */
     // I have used some sint32 numbers from another library for simplicity
     // i will use int
     int num = 30
     cJSON_AddItemToArray(pt_data,cJSON_CreateNumber(num));
}

int main()
{
    cJSON *root =cJSON_CreateObject();
    cJSON *pt_PPC= cJSON_CreateArray();
    cJSON_AddItemToObject(root,"PowerPC",pt_PPC);
    cJSON *pt_data = cJSON_CreateArray();
    cJSON_AddItemToArray(pt_PPC,pt_data);
    int i;
    for(i=0;i<10;i++)
       myFunc(pt_PPC);
    cJSON_Delete(root);
    return 0;
}

内存会随着时间的推移而增加。有什么建议吗?

EN

回答 3

Stack Overflow用户

发布于 2015-09-10 23:48:48

我在VS2015中测试了您的代码,发现您的myFunc函数甚至不能编译!函数cJSON_AddItemToObject有三个参数,甚至没有定义num

我尝试使用以下代码:

代码语言:javascript
复制
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#include "cJSON.h"

void myFunc(cJSON* ptr)
{
    /*some code */
    cJSON_AddItemToObject(ptr, "Item", cJSON_CreateNumber(10.0));
}

int main()
{
    cJSON *root = cJSON_CreateObject();
    cJSON *pt_PPC = cJSON_CreateObject();
    cJSON_AddItemToObject(root, "PowerPC", pt_PPC);
    myFunc(pt_PPC);
    cJSON_Delete(root);

    _CrtDumpMemoryLeaks();
}

我启用了内存泄漏调试(Link to Article),并使用_CrtDumpMemoryLeaks()打印可能的内存泄漏(如果有)(输出到调试输出窗口)。

没有检测到内存泄漏。

票数 1
EN

Stack Overflow用户

发布于 2015-09-11 00:15:57

您的代码并不完整,并且存在语法错误,因此不可能通过查看它来判断问题的确切位置。

无论如何,您很可能正在创建一个JSON对象(在某个地方),并且忘记将它添加到根对象或它的任何后代对象中。删除根对象时,未连接的元素不会被删除,并会泄漏内存。

希望这能有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2015-09-18 23:44:13

我找到了问题所在。这个问题仍然存在于cJSON库中。在一个函数中,我正在做类似这样的事情。

uint8 *arr; arr = (uint8 *)malloc(t_DataVariableInfo.s32_Size); getvariables(&arr); // this function gets some variables from a datapool //pt_data is the pointer of cJSON where this number has to be added cJSON_AddItemToArray(pt_data,cJSON_CreateNumber(arr[i])); free(arr);

现在,由于某种原因,arr不能被释放。cJSON_CreateNumber()函数可能正在对其进行一些更改。我是通过这样做让它工作的

uint8 *arr; arr = (uint8 *)malloc(t_DataVariableInfo.s32_Size); uint8 *address = arr; getvariables(&arr); // this function gets some variables from a datapool //pt_data is the pointer of cJSON where this number has to be added cJSON_AddItemToArray(pt_data,cJSON_CreateNumber(arr[i])); free(address);

谢谢你的帮助。抱歉,我不能发布所有的代码。这是cJSON_CreateNumber()的问题吗??

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

https://stackoverflow.com/questions/32505642

复制
相关文章

相似问题

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