哪些C/C++工具可以检查缓冲区溢出?

MrV*_*dez 22 c c++ buffer-overflow buffer-overrun

我被要求维护一个充满内存泄漏的大型C++代码库.在探索时,我发现我们有很多缓冲区溢出导致泄漏(它如何变坏,我不想知道).

我决定先删除缓冲区溢出.为了使我的bug更容易找到,可以使用哪些工具来检查缓冲区溢出?

dic*_*ciu 26

在Linux上我会使用Valgrind.

  • 缓冲区溢出是一个非常讨厌的错误,因为效果不一定接近原因(即它可能会崩溃500行).如果堆栈被破坏,您将需要所有可以获得调试的帮助.这就是Valgrind闪耀的地方 - 它一旦发生就会陷入溢出. (2认同)

Dav*_*ley 10

考虑使用更现代的数据结构作为避免缓冲区溢出的方法.读入std :: string不会溢出,std :: vectors比数组更安全.我不知道您的应用程序是什么,并且可能因为您需要速度而使用原始缓冲区,但更常见的是它们被使用,因为这是原始程序员所熟悉的.

使用上述工具搜索内存泄漏是一个好主意,但它们可能找不到所有潜在的泄漏,而使用标准字符串和容器类可以消除您没有意识到的问题.


gbj*_*anb 8

IBM的Purify将执行此操作,您在其下运行您的应用程序,它将为您提供所有错误(包括其他错误)的报告.

要消除内存泄漏,请使用UMDH - 运行您的应用程序,拍摄内存快照,再次运行,快照,然后使用diff工具查看自第一次运行以来所做的分配(请注意,您必须运行一次应用程序,并且尽可能快地拍摄快照.


MrV*_*dez 1

Visual Studio 有一个 /GS 编译器标志,可以添加缓冲区溢出保护。还有其他人吗?