cJSON memory leak是发生内存泄漏的post。但本例中的问题是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;
}内存会随着时间的推移而增加。有什么建议吗?
发布于 2015-09-10 23:48:48
我在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();
}我启用了内存泄漏调试(Link to Article),并使用_CrtDumpMemoryLeaks()打印可能的内存泄漏(如果有)(输出到调试输出窗口)。
没有检测到内存泄漏。
发布于 2015-09-11 00:15:57
您的代码并不完整,并且存在语法错误,因此不可能通过查看它来判断问题的确切位置。
无论如何,您很可能正在创建一个JSON对象(在某个地方),并且忘记将它添加到根对象或它的任何后代对象中。删除根对象时,未连接的元素不会被删除,并会泄漏内存。
希望这能有所帮助。
发布于 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()的问题吗??
https://stackoverflow.com/questions/32505642
复制相似问题