2

以下代码在使用 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

省略任何其他编译标志时,不会发生错误

是什么导致错误?我的代码有问题还是这是编译标志的无效组合,如果是这样,是什么导致了冲突?

4

0 回答 0