c – Valgrind报告说getaddrinfo正在泄漏内存?
发布时间:2020-12-16 10:19:44 所属栏目:百科 来源:网络整理
导读:我一直在我们的项目上运行Valgrind,并且valgrind已经报告说,尽管在函数的底部调用了freeaddrinfo,但是从getaddrinfo的调用中已经丢失了内存.知道可能导致这种情况的原因吗? int tcp_connect(char *address,char *port){//printf("%sn ",address); int stat
我一直在我们的项目上运行Valgrind,并且valgrind已经报告说,尽管在函数的底部调用了freeaddrinfo,但是从getaddrinfo的调用中已经丢失了内存.知道可能导致这种情况的原因吗?
int tcp_connect(char *address,char *port) { //printf("%sn ",address); int status,sockfd; struct addrinfo hints,*servinfo,*p; memset(&hints,sizeof hints); hints.ai_family = AF_UNSPEC; hints.ai_socktype= SOCK_STREAM; status = getaddrinfo(address,port,&hints,&servinfo); if(status != 0){ printf("tcpconnect: getaddrinfo failedn"); } for(p = servinfo; p != NULL; p = p->ai_next) { sockfd = socket(p->ai_family,p->ai_socktype,p->ai_protocol); if(sockfd == -1){ printf("tcpconnect: socket failedn"); continue; } status = connect(sockfd,p->ai_addr,p->ai_addrlen); if(status == -1){ close(sockfd); printf("tcpconnect: connect failedn"); continue; } break; } if (p == NULL){ printf("tcpconnect: could not get a valid socket file descriptorn"); return -1; } freeaddrinfo(servinfo); //return socket return sockfd; } valgrind输出在这里: ==7803== 384 bytes in 8 blocks are definitely lost in loss record 30 of 37 ==7803== at 0x4023CC8: malloc (vg_replace_malloc.c:236) ==7803== by 0x413FE46: gaih_inet (in /lib/libc-2.7.so) ==7803== by 0x4141CA1: getaddrinfo (in /lib/libc-2.7.so) ==7803== by 0x804D20D: tcp_connect (tcpconnect.c:18) ==7803== by 0x804D505: update_radio_data_t (radiodata.c:69) ==7803== by 0x4073368: start_thread (in /lib/libpthread-2.7.so) ==7803== by 0x4159CFD: clone (in /lib/libc-2.7.so) 我对此内存泄漏感到困惑,因为我确保在底部调用freeaddrinfo.这可能是Valgrind或freeaddrinfo中的错误吗? 解决方法
你的失败路径(如果(p == NULL))没有调用freeaddrinfo,我会在检查之前调用它.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |