在非托管C/C++代码中,检测内存泄漏的最佳实践是什么?和编码指南,以避免?(好像就这么简单;)
过去我们使用了一些愚蠢的方法:每次内存分配调用都有一个计数器增量,而在释放时减少.在程序结束时,计数器值应为零.
我知道这不是一个很好的方式,有一些捕获.(例如,如果释放由平台API调用分配的内存,则分配计数将与您的释放计数不完全匹配.当然,我们在调用分配内存的API调用时递增计数器.)
我期待您的经验,建议和一些简化此工具的工具参考.
我被要求维护一个充满内存泄漏的大型C++代码库.在探索时,我发现我们有很多缓冲区溢出导致泄漏(它如何变坏,我不想知道).
我决定先从危险函数开始删除缓冲区溢出.哪些C/C++函数最常使用不正确并可能导致缓冲区溢出?
对于用于帮助查找缓冲区溢出的编译器和/或工具,我创建了另一个处理此问题的问题
valgrind找不到任何有用的东西.我糊涂了.
Symptomes:
PS:代码不会出现段错误
目前我通过mmap()+ 替换所有malloc()取得了一些进展mprotect()
我有一个在调试版本中运行良好的应用程序,但是当我在发布版本中启动它时,我得到了一个
unhandled Exception at 0x0043b134 in myapp.exe: 0xC0000005:
Access violation while reading at position 0x004bd96c
如果我点击"break",它会告诉我没有加载符号,并且无法显示源代码.
在这种情况下我能做些什么来追查问题?