如果没有跟踪工具,有哪些检测/调试内存泄漏的技术?
最佳答案
拦截所有分配和释放内存的函数(根据平台的不同,列表可能是这样的:malloc、calloc、realloc、strdup、getcwd、free),除了执行这些函数原本做的事情外,保存有关的信息某处的调用,可能在动态增长的全局数组中,受多线程程序的同步原语保护。
此信息可能包括函数名称、请求的内存量、成功分配 block 的地址、让您了解调用者的堆栈跟踪等。在 free() 中,从数组中删除相应的元素(如果没有,则将错误的指针传递给 free,这也是一个可以及早检测到的错误)。当程序结束时,转储数组的剩余元素——它们将是泄漏的 block 。不要忘记分别在 main() 之前和之后分配和释放资源的全局对象。为了正确计算这些资源,您需要在最后一个全局对象被销毁后转储剩余资源,因此可能需要对编译器运行时进行一些小改动
关于c - 内存泄漏调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1473609/