无法在C中释放内存

瓦杰欧雅

当我在while循环中进行测试时,以下wifi_json()方法会不断增加内存。是因为该方法中使用的结构没有被释放,还是我没有使用free方法来正确释放内存?

#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) ;
   }
  }
阿尔格里布

我认为您的问题出在哪里os_json_log("%s",json_object_to_json_string(recv_json_object_device_wifi));

您应该为其分配一个指针,并在以后释放它。

const char *str = json_object_to_json_string(recv_json_object_device_wifi);
os_json_log("%s", str);
free(str);

此外,只需做一个

json_object_put(recv_json_object_device_wifi);

足够了,因为这是所有其他对象都添加到的根对象。无需调用json_object_put其任何子级。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法在C中释放内存

来自分类Dev

释放C中的内存

来自分类Dev

无法在 C 中释放重新分配的内存

来自分类Dev

在C中需要释放内存吗?

来自分类Dev

如何从C中的char数组释放内存

来自分类Dev

释放C中内存的正确方法

来自分类Dev

在C中循环分配和释放内存

来自分类Dev

链接列表和C中的释放内存

来自分类Dev

释放C中动态分配的内存

来自分类Dev

在C的递归子程序中释放内存

来自分类Dev

关于C ++中的内存释放的困惑

来自分类Dev

释放C ++中的非动态内存

来自分类Dev

在C中需要释放内存吗?

来自分类Dev

在C中释放内存不起作用

来自分类Dev

在C ++中终止进程并释放内存

来自分类Dev

在C中释放已分配的内存

来自分类Dev

如何释放内存到C中的指针

来自分类Dev

无法释放内存

来自分类Dev

在具有并行任务的Mono / C#中无法释放内存。如何解释分配?

来自分类Dev

无法释放C ++中由CreateFileMapping和MapViewOfFile创建的共享内存

来自分类Dev

为什么C无法从strtok设置的malloc'char *中释放内存?

来自分类Dev

释放R中的内存

来自分类Dev

释放GridView中的内存

来自分类Dev

活动完成后无法释放android应用中的内存

来自分类Dev

为什么C ++无法同时释放内存和指针

来自分类Dev

dict pop无法释放内存

来自分类Dev

char后无法释放内存*

来自分类Dev

dict pop无法释放内存

来自分类Dev

如何释放在C ++中分配的C#中的内存