以下代码在使用 clang 3.5 在 Debian Jessie 上编译时会引发AddressSanitizer 错误。
它似乎与链接库的组合有关,但我无法在互联网上找到类似的东西。
错误的再现
调用:clang++ -stdlib=libc++ -lc++abi -fsanitize=address,vptr sample.cpp -lsupc++ -o sample
//sample.cpp
#include <iostream>
class Foo {
virtual void bar() {
std::cerr << std::endl;
}
public:
virtual ~Foo() { }
};
int main() {
Foo foo;
try{
throw 1;
} catch(int i) {
return i;
}
return -1;
}
当省略 compile flag时-lc++abi
,会发生LeakSanitizer Runtime Error。
省略任何其他编译标志时,不会发生错误。
是什么导致错误?我的代码有问题还是这是编译标志的无效组合,如果是这样,是什么导致了冲突?