RTOS使用cJSON内存泄露问题

代码


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了也没有用。

求解

挽尊