valgrind

なぜだか結局mallocから逃げられない。その順当な結果としてメモリリークしてしまう。自動でチェックできるようにtravis-CIの中でvalgrindを走らせたい。valgrindはconda-forgeに入っているので、それをインストールすればよい。しかし、システムのgccを使うとvalgrindが動かない(libcのコンフリクトかな)ので、コンパイラもcondaでインストールする。実マシン上ではこれで問題なくvalgrindが動く。一方、travis-CI上ではコンパイラのインストールの途中でcondaのパッケージが取れずにコケてしまうので一時休止。

ところで、valgrindの出力のInvalid read/writeがよくわからない。例えば以下のページに書いてあるような場合は明白だ。

可変長配列を関数に渡した時に、invalid read/writeが起こるが、配列と同じ形のメモリをmallocで確保した場合はinvalid read/writeが起こらない。なぜかわからない。