2011-05-30

gccのiostreamのクラッシュ

ここ数年ほど、まともにデバッガを使ったことがない。そもそも、プログラムらしいプログラムを実行したこともない。というのも、今必要な能力が、規格を理解して説明することだからだ。プログラムの実行というのも、コンパイラーのpartial orderingやオーバーロード解決が正しく行われているかどうかの確認の意味合いぐらいでしか、やっていない。

C++0xの実装では、gccが他のコンパイラーより進んでいる。

gccは、週間スナップショットをのビルドを、ここから手に入れて使っている。自前でビルドするのが面倒なのだ。

ところが、このバイナリの問題なのか、あるいはgccのiostream自体の問題なのか、なぜかiostreamを使おうとするとクラッシュする。とりあえず問題になるのは、以下のようなコードだ。

std::cout << 0 ;
std::cout << std::endl ;

どうも、数値やらendlやらを食わせると、クラッシュしてしまう。理由がわからない。

どうやら、いいかげんにgcc環境でのデバッガを触ってみたほうが良さそうだ。そこで、GDBを使ってみた。

ステップ実行していくと、最終的に、 __gnu_cxx::__default_lock_policy()という関数の中で、以下のようなエラーがでる。

Cannot access memory at address 0x0

 ∧_∧
( ´∀`)< ぬるぽ

うむ、さっぱり分からん。しかし、こんなコードでクラッシュするのならば、もっと問題になっても良さそうなのだが、さっぱり話題になっていない。なにか私の環境がおかしいのだろうか。まあ、iostreamなど、日本語には何の役にも立たないから、どうでもいいのだが。

No comments: