我经常(大约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
,其中应填写正确的值,serverinfo
为NULL
,我认为它应该是{{1}}。如果所有这些值都是正确的,并且我从不在这里释放任何对象,为什么我会在这一行中得到错误?
答案 0 :(得分:4)
问题不在于你在这里解放一些东西。问题甚至不在这里。 getaddrinfo()
函数必须为它返回的addrinfo
结构的链表分配存储空间,因此它必须在引擎盖下调用malloc()
。并且malloc()
注意到程序中的其他位置,某些内容已写入空闲块,并且正在报告它。
你可以通过虔诚地执行一项政策,在你释放它们时始终设置指向NULL
的指针,从而帮助防止那种事情(写入你不再拥有的内存)。另外,valgrind。
嗯,好吧,你可以帮助防止在你释放它们之后不使用指针,但确保在释放后立即将指针设置为NULL会帮助你找到正在使用它们的地方。