我正在通过关注Beej's Guide to Network Programming文章学习网络编程。有一个例子:在freeaddrinfo上发生了什么事?
bind()
struct addrinfo hints, *servinfo, *p;
if ((rv = getaddrinfo(NULL, PORT, &hints, &servinfo)) != 0) {
fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv));
return 1;
}
// loop through all the results and bind to the first we can
for(p = servinfo; p != NULL; p = p->ai_next) {
//socket(...)
//bind(...)
break;
}
freeaddrinfo(servinfo); // all done with this structure
if (p == NULL) {
fprintf(stderr, "server: failed to bind\n");
exit(1);
}
后,freeaddrinfo()
被调用。我认为servinfo
链接列表现在应为NULL,并且指针p
应该为NULL,但不是,p
不是NULL,代码运行良好。
我想知道为什么在调用freeaddrinfo
之后p
不为空?
是的!是的!指针仍然是指针。即使'* p'也是空的。谢谢! – user1418404
调用'freeaddrinfo()'后''p'不保证为NULL。如果'* p'变为NULL',那么分配内存管理器的副作用就是释放'serveinfo'。有些内存管理器在释放内存时会将内存清零(或者甚至用特殊的值如0xcdcdcdcd或0xbaadfood来帮助调试),但是不能依赖代码中的行为。 –