当我在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] 删除。
我来说两句