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」だと死ななかったから。