鍋あり谷あり

テーマを決めずに適当に書いています。

私は後悔していない

C言語で自殺する方法。
思いつくままに:

ソース 短評 死にやすさ
main=0; たぶん、これより短くはできない ★★
main(){main();} 手元では死ななかった。そういうもの? -
main(){*(int*)0=0;} 地味にゼロ番地へ書き込み ★★★
main(){++0[(int*)0];} ゼロ番地への書き込みだが、演算子でちょっと煙に巻いてみる ★★★
main(){(main-999)();} 文法違反のような気がするが、gccコンパイルしてくれる*1
main(){++*((int*)main);} 手元では死ぬけど、何で死ぬのかよくわからない
main(){memset(0,0,-1);} 死なない可能性がないと思う ★★★★
main(){((int(*)())0)();} ゼロ番地へジャンプを素直に書いてみた ★★
main(){main(*(int*)main=0);} ゼロ番地へのジャンプだが、手元ではその前に死ぬ ★★★

x86でなければ奇数番地のアクセスで殺したいところだが、そういう処理系が手元にないのでよくわからない。
試している環境は、Athlon64 + windows xp sp2 なので、DEPが効いており、死にやすくなっている。
と思う。
上記の中では、memset で死ぬのが好き。なんか力強さを感じる。

*1:「-999」なのは、「-99」だと死ななかったから。