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 ランタイム エラーが発生します。

他のコンパイル フラグを省略した場合、エラーは発生しません。

エラーの原因は何ですか? 私のコードに何か問題がありますか、それともこれはコンパイル フラグの無効な組み合わせですか? もしそうなら、競合の原因は何ですか?

4

0 に答える 0