在下面的代码片段中,有一个并非微不足道的错误,但我希望像 AddressSanitizer 这样的工具能够捕获它。
#include <vector>
#include <iostream>
int main ()
{
std::vector<int> toto;
toto.push_back(2);
int const& titi = toto[0];
toto.pop_back();
std::cout << titi << std::endl;
return 1;
}
当对向量进行范围限定并在范围之外打印时,catch 引用会抛出错误 use-heap-after-free。
但是当没有范围时,std::vector
实现可能不会在 pop_back 之后释放内存,因此引用仍然指向有效内存。
我四处搜索,发现您可以手动毒化内存,我想知道这是否已在 STL 中实现(https://github.com/google/sanitizers/wiki/AddressSanitizerManualPoisoning)