0

cJSON 内存泄漏是发生内存泄漏的帖子。但是这种情况下的问题是 cJSON_Print() 函数。

我什至没有使用这个功能(暂时已经评论过)并且仍然存在内存泄漏。我的颂歌看起来像这样

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

记忆随着时间而增加。有什么建议么?

4

3 回答 3

1

我在VS2015中试过你的代码,发现你的myFunc函数甚至没有编译!该函数cJSON_AddItemToObject采用三个参数,num甚至没有定义。

我尝试使用以下代码:

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

我启用了内存泄漏调试(链接到文章)并用于_CrtDumpMemoryLeaks()打印可能的内存泄漏(如果有)(到调试输出窗口)。

没有检测到内存泄漏。

于 2015-09-10T15:48:47.750 回答
0

您的代码不完整并且存在语法错误,因此无法通过查看它来准确判断问题所在。

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

希望这可以帮助。

于 2015-09-10T16:15:57.043 回答
0

我发现了问题。问题仍然存在于 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()吗??

于 2015-09-18T15:44:12.693 回答