【问题标题】:How to diagnose windows-specific memory problems in C++如何在 C++ 中诊断特定于 Windows 的内存问题
【发布时间】:2016-07-18 13:34:02
【问题描述】:

我对使用许多vector::resize、vector::reserve 和memcopy 操作的程序进行了一些更改,以便操作缓冲区以从文件中读取数据。我在 Linux 上运行了我的单元测试,它们以优异的成绩通过了,但是当我在 Windows 机器上运行相同的测试时,我看到了 memory access violation occurred at address 0x0038e000, while attempting to read inaccessible data

我接受了一些我在网上阅读的建议并针对我的程序运行 Valgrind 以尝试检测内存泄漏/问题,但是它返回“所有堆块都已释放,不可能有泄漏”。

关于如何在 Windows 中找出内存错误的原因还有其他建议吗?

谢谢!

【问题讨论】:

  • 你不需要 valgrind。你只需要一个调试器。查找导致此错误的代码行并从此处开始工作。
  • 在调试器下运行,当程序出错时检查调用历史/堆栈帧。
  • 尝试使用address sanitizer构建程序

标签: c++ memory-leaks


【解决方案1】:

【讨论】:

  • 这个。如果您知道如何使用它们,Windows 实际上带有一些惊人的调试功能。幸运的是,Microsoft Press 出版了 Tarik Soulami 所著的Inside Windows Debugging一书,对一些最重要的工具进行了很好的实践介绍。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-29
  • 1970-01-01
  • 1970-01-01
  • 2011-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多