Skip to content

Enable address sanitizer #355

Description

@ikanago

address sanitizermallocfree を置き換えることで double free や memory leak などの挙動を検出するツールです.

使い方

gcc にオプションを渡すだけで有効化できます.

g++ -fsanitize=address -fno-omit-frame-pointer -g test.cpp && ./a.out
int main() {
    int *a = new int[10];
}

導入手順

CI で動かすことで main branch にはメモリリークなどがないままに保ちたいところですが,いきなり CI で動かすには既存の不具合を解消する必要があります.
しかし,実際に上記のオプションをつけてテストコードを実行してみたところ,かなり大量のエラーが出力されました.
具体的にはこのようなサマリが得られました: SUMMARY: AddressSanitizer: 2235751 byte(s) leaked in 18090 allocation(s).
これがソースコードの行数にしてどの程度のものかは不明なのですが,おそらくそれなりの量であり,すぐに address sanitizer を CI で動かすことはできなさそうです.

なので,まずは手元で動かしてエラーをつぶしつつ,いくつかの PR にわたって修正します.
そしてエラーが検出されなくなったら CI で address sanitizer を動かすという流れをとるというのがいま考えている案です.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions