-
-
- cJSON *request = NULL;
- cJSON *response = NULL;
- if(strcmp("set",action->valuestring)==0 && mode != 0) //action的值与"set"一样
- {
- cJSON_AddStringToObject(response, "action", "set");
- }
- else if(strcmp("get",action->valuestring)==0) //action的值与"get"一样
- {
- cJSON_AddStringToObject(response, "action", "get");
- }
- /************************************************/
- cJSON_AddStringToObject(response,"version",VERSION); //为response对象添加一个键值对
- memset(buffer, '\0', sizeof(buffer));
- sprintf(buffer, "%d", mode);
- cJSON_AddStringToObject(response, "workmode", buffer);
- /********************** time 对象 ************************/
- time = cJSON_CreateObject(); //创建time对象
- memset(buffer, '\0', sizeof(buffer));
- sprintf(buffer, "%d", Set_Time_Value);
- cJSON_AddStringToObject(time, "set", buffer); //添加set:value键值对
- memset(buffer, '\0', sizeof(buffer));
- if (Set_Time_Value != 0)
- sprintf(buffer, "%d", ShengYu_Time_Min);
- else
- sprintf(buffer, "%d", 0);
- cJSON_AddStringToObject(time, "remain", buffer); //添加remain键值对
- cJSON_AddItemToObject(response, "time", time); //为response对象,中添加time对象
- /********************** temperature 对象 ************************/
- temperature = cJSON_CreateObject();
- memset(buffer, '\0', sizeof(buffer));
- sprintf(buffer, "%d", Set_Temp_Value);
- cJSON_AddStringToObject(temperature, "set", buffer);
- memset(buffer, '\0', sizeof(buffer));
- sprintf(buffer, "%d", Temperature);
- cJSON_AddStringToObject(temperature, "current", buffer);
- cJSON_AddItemToObject(response, "temperature", temperature);
- }
- }
- char *string;
- string = cJSON_PrintUnformatted(response);
debug看一下。如下图,当收到get指令的时候,request,response,string都有地址
当收到set指令的时候,request,response有地址,但是string没有。(set指令比get长,所以json化后占的内存多)
再看response内部各json结构体的地址,发现好像最后一个时membase+576,这是内存快用完了的意思吗?
所以在cJSON_AddStringToObject的时候,没有给string申请到内存?
看这样子,应该是这个原因