首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内存不能在C中释放

内存不能在C中释放
EN

Stack Overflow用户
提问于 2016-04-17 06:15:55
回答 3查看 586关注 0票数 2

下面的wifi_json()方法在while循环中调用它来测试时会不断增加内存。是因为方法中使用的结构没有被释放,还是我没有正确地使用空闲方法来释放内存?

代码语言:javascript
复制
#include "MiCO.h" 
#include "json_c/json.h"
#define os_json_log(M, ...) custom_log("JSON", M, ##__VA_ARGS__)
void wifi_json()
{
  os_json_log("%s","start");
  struct json_object *recv_json_object_device_wifi=NULL;
  recv_json_object_device_wifi=json_object_new_object();      

  struct json_object *recv_json_object_array_wifi=NULL;
  recv_json_object_array_wifi=json_object_new_array(); //wifi array

  struct json_object *recv_json_object_wifi=NULL; //recv wifi
  recv_json_object_wifi=json_object_new_object();

  struct json_object *wifi_object=NULL; //wifi
  wifi_object=json_object_new_object();

  //wifi
 json_object_object_add(wifi_object, "connected", json_object_new_string("1"));    
 json_object_object_add(wifi_object, "strength", json_object_new_string("60")); 
 json_object_object_add(wifi_object, "ip", json_object_new_string("60"));
 json_object_object_add(wifi_object, "mac", json_object_new_string("60"));
 json_object_object_add(wifi_object, "ssid", json_object_new_string("60"));
 json_object_object_add(recv_json_object_wifi,"WIFI",wifi_object);

 json_object_array_add(recv_json_object_array_wifi,recv_json_object_wifi);
 json_object_array_add(recv_json_object_array_wifi,recv_json_object_wifi);
 json_object_array_add(recv_json_object_array_wifi,recv_json_object_wifi);

 json_object_object_add(recv_json_object_device_wifi,"WIFI_Info",recv_json_object_array_wifi);
 os_json_log("%s",json_object_to_json_string(recv_json_object_device_wifi));

 free(recv_json_object_device_wifi);
 recv_json_object_device_wifi=NULL;

 free(recv_json_object_array_wifi);
 recv_json_object_array_wifi=NULL;

 json_object_put(recv_json_object_wifi);
 json_object_put(wifi_object);


 json_object_put(recv_json_object_array_wifi);
 json_object_put(recv_json_object_device_wifi);
}
int application_start( void )
{  
 while(1)
 {
    wifi_json(); 
    os_json_log("Free memory has %d bytes", MicoGetMemoryInfo()->free_memory) ;
   }
  }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-04-17 07:45:34

我认为你的问题在os_json_log("%s",json_object_to_json_string(recv_json_object_device_wifi));

您应该为它分配一个指针,然后释放它。

代码语言:javascript
复制
const char *str = json_object_to_json_string(recv_json_object_device_wifi);
os_json_log("%s", str);
free(str);

更进一步,我只是在做一个

代码语言:javascript
复制
json_object_put(recv_json_object_device_wifi);

就足够了,因为这是添加所有其他对象的根对象。没有必要给json_object_put的任何一个孩子打电话。

票数 1
EN

Stack Overflow用户

发布于 2016-04-17 06:22:28

您还需要释放这两种方法创建的内存:

代码语言:javascript
复制
struct json_object *recv_json_object_wifi=NULL; //recv wifi
recv_json_object_wifi=json_object_new_object();

struct json_object *wifi_object=NULL; //wifi
wifi_object=json_object_new_object();
票数 2
EN

Stack Overflow用户

发布于 2018-06-07 10:14:04

请尝试使用它来释放json对象"json_object_object_del()“的内存。

json_object_object_del(recv_json_object_wifi);recv_json_object_wifi=NULL;json_object_object_del (wifi_object);wifi_object=NULL;

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

https://stackoverflow.com/questions/36673295

复制
相关文章

相似问题

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