Ниже приведена часть скрипта, вызываемая из основной функции. Если я закомментирую приведенную ниже функцию, все будет работать нормально без каких-либо проблем с утечкой памяти, тогда как при включении этой функции процесс заканчивается утечкой памяти и в конечном итоге он останавливается в течение 2 часов.
void passRFIDInfo(int antenna_id, int peakRssi, char *fast_id, int reader_mac_flag, int data_accumulated_flag){
if (reader_mac_flag == 0){
struct ifreq s;
int fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP);
strcpy(s.ifr_name, "eth0");
if (0 == ioctl(fd, SIOCGIFHWADDR, &s)) {
int i;
for (i = 0; i < 6; ++i){
unsigned char data = s.ifr_addr.sa_data[i];
sprintf(reader_mac+(i*2), "%02x", data);
}
reader_mac[12] = '\0';
}
}
char uniqueID[40];
char *antennaID = (char*)malloc(2);
snprintf(antennaID, sizeof(antennaID), "%d", antenna_id);
strcpy(uniqueID, reader_mac);
strcat(uniqueID, ".");
strcat(uniqueID, antennaID);
strcat(uniqueID, ".");
strcat(uniqueID, fast_id);
int json_size = json_object_size(root);
if (data_accumulated_flag==1 && json_size!=0)
{
sendMQTT(rfid_json_dict);
free(rfid_json_dict);
json_decref(root);
json_t *root = json_object();
char *rfid_json_dict;
}
json_object_set_new( root, uniqueID, json_integer(peakRssi));
rfid_json_dict = json_dumps(root, 0);
printf("rfid_json_dict ::%s\n",rfid_json_dict);
printf("\n");
}
Перед выполнением программы доступная память во встроенной платформе linux составляет:
>show system cpu
Status='0,Success'
TotalMemory='62304256'
FreeMemory='18621122'
CPUUtilization='3'
Поскольку выполнение продолжается в течение 2 часов, FreeMemory продолжает выходить из строя и, в конце концов, в конце 3 часов, процесс завершился автоматически. Как решить такую проблему?