Memory leak on vxworks.
I maintainer di solito rispondono entro 12 giorni
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 25/100
- Tipo di issue
- Bug
- Chiarezza
- Da chiarire
- Stato di attività
- Ferma
- Stack tecnologico
- c
- Ambito
- operating-systems
Direzione di ricerca
Inizia riducendo il carico di lavoro VxWorks segnalato a un caso riproducibile e tracciando la proprietà di ogni allocazione e di ogni risultato di cJSON_Print mostrato nell’esempio. Verifica se la costruzione e l’eliminazione ripetute di cfgDataItem e root lasciano un’allocazione misurabile, quindi documenta un riproduttore minimo e la posizione osservata della perdita come definizione di completato.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
I use cJSON that version is 1.7.11.My cJSON code run on vxWorks. When my device run about 24h, a memory leak occurs. I use memory analyser tool, I find out that it may be wrong way in cJSON. My code are as follows:
char timestamp_str[64];
char terminal_type_str[16];
char *in_buff = NULL;
char *out_buff = NULL;
uint32_t b_num = 0;
uint32_t msg_total_len = 0;
uint64_t timestamp = 0;
int rc = 0, in_len = 0, out_len = 0, ret = 0, i = 0, bIndex = 0;
char pub_topic[64] = "dts/device/data/report";
cJSON *root = NULL, *item = NULL, *cfgDataItem = NULL, *gps_item = NULL, *b_info_item = NULL;
cJSON *b_item = NULL, *s_info_item = NULL;
cJSON *fs_rssi_item = NULL, *ts_rssi_item =NULL;
cJSON *tmp_item = NULL;
MQTTMessage pub_msg;
GPSINFO gpsInfo;
rep_dsp1tocpu_t *rep;
rep_zd_normal_topn_userlist_toweb_t msg;
out_buff = (char *)calloc(1, MAX_MSG_LEN);
memset(out_buff, 0, MAX_MSG_LEN);
memset(timestamp_str, 0, 64);
memset(terminal_type_str, 0, 16);
memset(&gpsInfo, 0, sizeof(GPSINFO));
sprintf(terminal_type_str, "%d", CARRIER_TERMINA_ID);
b_num = common_frame_get_b_num((uint8_t *)frame);
msg_total_len = sizeof(rep_dsp1tocpu_t) + b_num*sizeof(b_info_list_t);
rep = (rep_dsp1tocpu_t *)malloc(msg_total_len);
memset(rep, 0, msg_total_len);
memcpy(rep, frame, msg_total_len);
root = cJSON_CreateObject();
item = cJSON_CreateObject();
cfgDataItem = cJSON_CreateObject();
gps_item = cJSON_CreateObject();
cJSON_AddStringToObject(gps_item, "data", gpsInfo.gps);
cJSON_AddNumberToObject(gps_item, "validFlag", gpsInfo.validFlag);
cJSON_AddItemToObject(cfgDataItem, "curGpsInfo", gps_item);
cJSON_AddNumberToObject(cfgDataItem, "timeStamp", timestamp);//进行base64发送
cJSON_AddStringToObject(cfgDataItem, "deviceId", msg.rep_common.device_id);
cJSON_AddStringToObject(cfgDataItem, "terminalType", terminal_type_str);
cJSON_AddNumberToObject(cfgDataItem, "channelId", msg.rep_common.channel_id);
cJSON_AddNumberToObject(cfgDataItem, "type", 2);
cJSON_AddNumberToObject(cfgDataItem, "bNum", msg.b_num);
b_info_item = cJSON_CreateArray();
for(bIndex = 0; bIndex < 16; bIndex++)
{
b_item = cJSON_CreateObject();
fs_rssi_item = cJSON_CreateFloatArray(rep->b_info_list[bIndex].fs_rssi, 56);
cJSON_AddItemToObject(b_item, "fsRssi", fs_rssi_item);
ts_rssi_item = cJSON_CreateFloatArray(rep->b_info_list[bIndex].ts_rssi, 52);
cJSON_AddItemToObject(b_item, "tsRssi", ts_rssi_item);
s_info_item = cJSON_CreateObject();
cJSON_AddNumberToObject(s_info_item, "validFlag", rep->b_info_list[bIndex].info.validFlag);
cJSON_AddNumberToObject(s_info_item, "id", rep->b_info_list[bIndex].info.id);
cJSON_AddNumberToObject(s_info_item, "xyzType", rep->b_info_list[bIndex].info.xyzType);
cJSON_AddNumberToObject(s_info_item, "x", rep->b_info_list[bIndex].info.x);
cJSON_AddNumberToObject(s_info_item, "y", rep->b_info_list[bIndex].info.y);
cJSON_AddNumberToObject(s_info_item, "z", rep->b_info_list[bIndex].info.z);
cJSON_AddItemToObject(b_item, "sInfo", s_info_item);
cJSON_AddItemToArray(b_info_item,b_item);
}
cJSON_AddItemToObject(cfgDataItem, "bList", b_info_item);
in_buff = cJSON_Print(cfgDataItem);
in_len = strlen(in_buff);
ret = base64_encode(in_buff, in_len, out_buff, &out_len);
if(ret < 0 )
printf("failed to base64_encode.");
cJSON_AddNumberToObject(item, "msgLen", msg.rep_common.msg_len);
cJSON_AddStringToObject(item, "cfgData", out_buff);
cJSON_AddItemToObject(root, "data", item);
cJSON_AddStringToObject(root, "deviceId", msg.rep_common.device_id);
cJSON_AddStringToObject(root, "commandType", msg.rep_common.commnad_type);
cJSON_AddStringToObject(root, "tickTimeStamp", timestamp_str);
cJSON_AddStringToObject(root, "testPlanId", interface_mission_id.mission_id);
pub_msg.payload = cJSON_Print(root);
pub_msg.payloadlen = (int)strlen(pub_msg.payload);
pub_msg.qos = QOS2;
pub_msg.retained = 1;
rc = MQTTPublish(&meassage_process_c, pub_topic, &pub_msg);
if(!rc)
printf("gather_publish_func MQTTPublish %d, id = %d MQTTPublish MQTT IoT Cloud Success! \n", rc, pub_msg.id);
else
printf("gather_publish_func MQTTPublish %d, MQTTPublish ERR!\n", rc);
free(in_buff);
free(out_buff);
free(rep);
free(pub_msg.payload);
cJSON_Delete(cfgDataItem);
cJSON_Delete(root);
I'm looking forward to your replay.Best regards.
- Lingua principale
- C
- Stelle
- 13k
- Fork
- 3.5k
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di DaveGamble/cJSON
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
DaveGamble/cJSON#1106 ·
I maintainer di solito rispondono entro 12 giorni
-
Undefined-Behavior in function cJSON_SetNumberHelperForse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
DaveGamble/cJSON#1100 · 1 reazione ·
I maintainer di solito rispondono entro 12 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 86/100
DaveGamble/cJSON#1094 · 9 commenti · 1 reazione ·
I maintainer di solito rispondono entro 12 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
DaveGamble/cJSON#1093 ·
I maintainer di solito rispondono entro 12 giorni
-
Use-after-free in cJSONUtils_ApplyPatches when a patch removes the patch arrayForse già presa @iliasabk l’ha presa 32 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
DaveGamble/cJSON#1082 ·
I maintainer di solito rispondono entro 12 giorni
Tutte le issue di DaveGamble/cJSON
Issue simili
-
v9.6.0: CMake incorrectly enforces presence of libevdevForse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 67/100
I maintainer di solito rispondono entro 1 giorno
-
[Bug] Unhandled ValueError terminates watchdog thread when GISRC value contains multiple colonsApertabug
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
I maintainer di solito rispondono entro 1 giorno
-
bug Component component: net
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
RT-Thread/rt-thread#11913 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
contiki-ng/contiki-ng#3289 ·
I maintainer di solito rispondono entro 3 giorni
-
area:docs help wanted type:enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
I maintainer di solito rispondono entro 1 giorno