我正在使用 gcc 和嵌入 clang 的消毒剂,包括地址消毒剂。事情运行得很好,但是在下一个演示代码中,尽管存在错误,但我没有得到与错误相关的输出(更准确地说 - 根本没有输出):
#include <string>
#include <iostream>
using std::string;
using std::cout;
class Foo
{
string _member;
public:
Foo(): _member("just a string") {}
const string& get() const { return _member; }
};
const string& bar()
{
// returning reference to a temp object on stack
return Foo().get();
}
int main()
{
cout << bar() << '\n';
return 0;
}
我试过g++ -O0 -g -fsanitize=address test.cc
了,同样的clang++
:g++-version 什么都不打印,clang 一个打印垃圾很长一段时间。Valgrind 在非仪器二进制上给出反馈:
Syscall param write(buf) points to unaddressable byte(s)
.
是内部问题还是我做错了什么?
版本:gcc 4.9.2、clang 3.6.0