malloc在getaddrinfo中的校验和不正确

时间:2013-07-30 04:38:59

标签: c sockets malloc

我经常(大约70%的时间)得到错误

malloc: *** error for object 0x1567c574: incorrect checksum for freed object - object was probably modified after being freed.
*** set a breakpoint in malloc_error_break to debug

在这行代码中

getaddrinfo(baseServer, "http", &hints, &serverinfo);

现在,当我检查这些值时,baseServer是一个有效的字符串(通常为www.a-cstudios.com),"http"显然从未被释放导致此错误,hintsstruct addrinfo,其中应填写正确的值,serverinfoNULL,我认为它应该是{{1}}。如果所有这些值都是正确的,并且我从不在这里释放任何对象,为什么我会在这一行中得到错误?

1 个答案:

答案 0 :(得分:4)

问题不在于你在这里解放一些东西。问题甚至不在这里getaddrinfo()函数必须为它返回的addrinfo结构的链表分配存储空间,因此它必须在引擎盖下调用malloc()。并且malloc()注意到程序中的其他位置,某些内容已写入空闲块,并且正在报告它。

你可以通过虔诚地执行一项政策,在你释放它们时始终设置指向NULL的指针,从而帮助防止那种事情(写入你不再拥有的内存)。另外,valgrind。

嗯,好吧,你可以帮助防止在你释放它们之后不使用指针,但确保在释放后立即将指针设置为NULL会帮助你找到正在使用它们的地方。