0

我经常(大约 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"显然永远不会导致这个错误,hints是一个struct addrinfo用正确的值填写的,应该是,并且serverinfoNULL,我相信它是应该是。如果所有这些值都是正确的,并且我从来没有在这里释放任何对象,为什么我会在这一行得到错误?

4

1 回答 1

4

问题不在于你在这里释放了一些东西。问题甚至不在这里。该getaddrinfo()函数必须为其返回的结构链表分配存储空间addrinfo,因此它必须在后台调用malloc()。并且malloc()注意到在你的程序的其他地方,有东西​​被写入了一个空闲块,并且好心地报告它。

您可以通过虔诚地执行一项策略,即在释放指针时始终设置指针,从而帮助防止这种事情(写入您不再拥有的内存)NULL。还有,瓦尔格林。

好吧,您可以通过在释放指针后不使用指针来帮助防止此类事情发生,但确保在释放后立即将指针设置为 NULL 将帮助您找到正在使用它们的地方。

于 2013-07-30T04:50:34.760 回答