【发布时间】:2021-07-18 15:40:03
【问题描述】:
src.cpp
#include <iostream>
#include <cstring>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
int main(){
struct addrinfo hints, *servinfo;
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_PASSIVE;
getaddrinfo(NULL, "1560", &hints, &servinfo);
freeaddrinfo(&hints);
}
我用gdb找出错误发生在哪里,它发生在memset 但是当我注释掉对 freeaddrinfo() 的调用时,它没有给出错误并且可以正常工作!
我正在运行 Ubuntu 20.04.2 内核 5.8.0-55-generic
编辑: 正如您指出的,我应该给 freeaddrinfo 一个由 getaddrinfo 提供的列表,当我将 servinfo 传递给 freeaddrinfo 时,它会给出以下错误
double free or corruption (out)
[1] 4123 abort (core dumped) ./a.out
编辑 2:谢谢,在编辑问题时,我忘记用 servinfo 替换 &hints,并认为我已经替换了它,很抱歉给您带来不便,我的愚蠢值得一票否决。
【问题讨论】:
-
你可以试试valgrind