纪念一下跑测试跑了几天才找出的一个内存泄漏,这个函数源于UNP,还以为UNP有bug呢,找到原书当getaddreinfo失败或者res==NULL的时候直接退出了。但是写这个代码的同学当然不想连接不上直接退出,于是忘记了freeaddrinfo调用直接返回,那个struct addrinfo就没释放。很多错误都是这种,涉及到库函数的时候更加难查。inttcp_connect(constchar*host,constchar*serv)
{intsockfd,n;structaddrinfohints, *res, *ressave;
bzero(&hints;,sizeof(structaddrinfo));
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;if( (n = getaddrinfo(host, serv, &hints;, &res;)) != 0)
{
log_sprintf("tcp_connect error for %s, %s: %s", host, serv, gai_strerror(n));
freeaddrinfo(res);//oops: me
...
继续阅读
(26)