c++ - 使用 g++ 构建的 C++ 中的运行时数组边界检查

标签 c++ arrays

有没有办法在使用 g++ 编译的 C++ 中进行数组边界检查?

理想情况下,不应以任何方式修改源代码。使用 std::vectorstd::tr1::arrayboost::array 不是一种选择,因为代码库很大等转移是不可行的。

最佳答案

Google 的 AddressSanitizer是一个编译器检测模块和运行时库,可以检查对堆、堆栈和全局变量等的越界访问。可用in Clang 3.1+in GCC 4.8+ .

要使用它,请将 -fsanitize=address(或旧 Clang 3.1 中的 -faddress-sanitizer)传递给编译器和链接器(链接 asan;不需要显式的-lasan)。要在错误消息中获得更好的堆栈跟踪,请将 -fno-omit-frame-pointer 传递给编译器。

它最初用于 Chromium 测试,以及 since 2012 , 是 used by Firefox devs , 也。有一个不错的blog post on how to get it running with Qt .您可能还想阅读更多上下文 on Wikipedia .

关于c++ - 使用 g++ 构建的 C++ 中的运行时数组边界检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2291114/

相关文章:

Python 过滤二维空间中的点

c++ - 以范围作为参数

c# - 如何通过禁用 Name Mangling 来调用实例方法

C++ this作为线程参数,变量不可用

Java对象数组空元素内存

c - 我正在尝试使用 malloc 函数为数组分配内存,但值未正确扫描。谁能解释一下吗?

android - 从共享首选项中放置和获取字符串数组

c# - C#[在Unity中]和C++之间的命名管道

c++ - 继承的类数据成员

javascript - 根据json数据属性动态生成多个div