代码
int write_syscfg_parameter(char *key,char *value)
{
unsigned char str[1000];
int retlen = 0;
cJSON *root = NULL;
char *str2 = NULL;
if(key == NULL || value == NULL)
return -1;
retlen=syscfg_read(str,sizeof(str)); //从flash中读取数据
if(retlen == 1){
return -2;
}
root = cJSON_Parse((const char*)str); //将数据解析为root
if(root == NULL){
return -3;
}
cJSON_ReplaceItemInObject(root, key, cJSON_CreateString(value)); //更改root中键对应的值
if(root == NULL){
return -5;
}
str2 = cJSON_PrintUnformatted(root); //打印
if(str2 == NULL)
{
cJSON_free(str2);
cJSON_Delete(root);
return -4;
}
syscfg_write(str2,1000);
cJSON_free(str2);
cJSON_Delete(root);
return 0;
}
结果:修改次数多了以后,返回-4
代码如上,这个接口就是先从flash中读取键值对,然后使用ReplaceItemInObject更换键值。但是内存始终释放不掉,更改几次之后PrintUnformatted就申请不到空间了,返回-4.应该是内存泄漏问题,尝试了很多方法,将cJSON中的malloc和free都指向rt_malloc和rt_free了也没有用。
求解