下面是脚本的一部分,同样是从 main 函数调用的。如果我注释掉以下函数,则一切正常,没有任何内存泄漏问题,而通过包含此函数,该过程最终会出现内存泄漏,并最终在 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 小时结束时,进程自动终止。如何解决此类问题?