【发布时间】:2015-04-15 16:47:14
【问题描述】:
我正在使用 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
【问题讨论】:
-
您想知道为什么您的消毒剂会失败或您的代码有什么问题吗?
-
@honk,这是带有预期错误的演示代码。我对消毒剂静音感兴趣。