c - 内存泄漏调试

标签 c memory-leaks embedded

如果没有跟踪工具,有哪些检测/调试内存泄漏的技术?

最佳答案

拦截所有分配和释放内存的函数(根据平台的不同,列表可能是这样的:malloc、calloc、realloc、strdup、getcwd、free),除了执行这些函数原本做的事情外,保存有关的信息某处的调用,可能在动态增长的全局数组中,受多线程程序的同步原语保护。

此信息可能包括函数名称、请求的内存量、成功分配 block 的地址、让您了解调用者的堆栈跟踪等。在 free() 中,从数组中删除相应的元素(如果没有,则将错误的指针传递给 free,这也是一个可以及早检测到的错误)。当程序结束时,转储数组的剩余元素——它们将是泄漏的 block 。不要忘记分别在 main() 之前和之后分配和释放资源的全局对象。为了正确计算这些资源,您需要在最后一个全局对象被销毁后转储剩余资源,因此可能需要对编译器运行时进行一些小改动

关于c - 内存泄漏调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1473609/

相关文章:

c++ - Tensorflow C++ 内存泄漏 - Valgrind

java - 垃圾收集器没有像在 Android 应用程序中那样释放 "trash memory"

c++ - 在 C 中输入具有 "boolean"返回类型和 "no parameters"的函数

c - 为什么即使我没有返回对象,我的结构也会被清零?

c++ - NetApiBufferFree 返回 ERROR_INVALID_PARAMETER(错误代码 87)

arm - 如何交叉编译 Expect for ARM

c++ - GPIO模式寄存器

c - 在没有循环或条件语句的情况下从 1 打印到 1000 的 C 代码如何工作?

c - 打开名称为 socket :[4023] 的套接字

c - 如何用C语言使用VTK?