[英]C - How to resolve memory leaks?
下面是脚本的一部分,同样是从主 function 调用的。 If i comment out the below function, everything works fine without any memory leak issue, whereas by including this function, the process ends up with memory leak and eventually it stops over a span of 2 hrs.
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平台中可用的memory是,
>show system cpu
Status='0,Success'
TotalMemory='62304256'
FreeMemory='18621122'
CPUUtilization='3'
随着执行持续 2 小时等,FreeMemory 不断下降,最终在 3 小时结束时,进程自动终止。 如何解决此类问题?
正如评论中指出的那样,您错过了对天线 ID 的free()
的antennaID
。 所以你malloc()
memory 为它,但它从未被释放。 所以它只会不断堆积。
一般规则是,每次调用malloc()
时,都应该调用free()
。 至少,我是这样学习的,这对我来说最有意义。 一旦你使用完一个变量,你应该free()
它。 简要浏览该代码,它看起来好像天线 ID 不会离开antennaID
? 所以你应该在 function 返回之前释放它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.