使用VS 2010。已经分析了内存泄漏。现在我想知道在执行期间编译的代码是否正在进行边界检查。我有理由确定这发生在用 C++ 创建的向量和数组上;我不知道边界检查是否扩展到通过调用malloc或使用new关键字创建的对象。如果 VS不对这种情况进行边界检查,是否有第三方工具可以做到这一点?
问问题
1422 次
2 回答
2
调试 CRT 堆将在新的内存块周围分配一个“溢出缓冲区”,并在块被释放时检查缓冲区的预期值 (0xFD)。当溢出缓冲区包含与预期不同的值时,您将看到 CRT 运行时检查失败对话框。这将捕获溢出写入但不捕获读取。不幸的是,只要您的进程可以访问正在读取的页面,就没有捕捉越界读取的好方法。
有关详细信息,请参阅内存管理和调试堆和_CrtSetDbgFlag。
于 2013-02-07T01:30:20.283 回答
0
数组在 C++ 中默认不检查边界,无论它们是静态分配还是动态分配。我曾经在 Visual C++ 中使用BoundsChecker。在 Linux 上还有 valgrind,这很好。
于 2013-02-07T01:30:15.800 回答