アカウント名:
パスワード:
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
Stay hungry, Stay foolish. -- Steven Paul Jobs
ページがなさそうなところで (スコア:1)
# 数字によって例外の種類が違うので適当に選んでね。
ああこれも (スコア:1)
int型のポインタ変数として 2 というヒトを宣言できるの
なんでやねん!で思考停止中
Re:ああこれも (スコア:1)
「*(int*)2 = 0;」は宣言じゃなくてただの文です。
まず、(int*)hogeで「hogeはintのポインタなんぢゃゴルァ!」とコンパ
イラに無理矢理納得させます。キャストって奴です。これの前に*を付けると
そのポインタの差す値になります。
んで、そこに0を書いてるので「アドレスhogeに0を書く(型はintで)」とい
う動作になります。hogeが「データとして書いちゃいけない所」だったり
「特権がないと書いちゃいけない所」だったり「ページがない所」だったりす
るとそれぞれ違反になります。
たぶん前二つがセグメンテーション違反になるかな?OSやCPUにもよるけど。
# hixさんの例は「データとして書いちゃいけない所」ですね。コンパイラは
# 文字列を「データとして書いちゃいけない所」に分類し、OSがその通りに
# セグメントを設定するので、そこに書こうとすると「書いちゃだめ」と。
キャストかぁ! (スコア:1)
確認するということは、セグメンテーション違反をわざと引き起こす
プログラムを走らせて、ちゃんとSIGSEGVを発令してプログラムを
死なせてくれるかどうか確認するということなのですね
それをやってくれないOS君だと、もろとも死亡…ああやだやだ
#そんなOSってあるのか? :P
うーん、少しずつ分かってきたかも。
丁寧な解説、ありがとうございます。すごく感謝しています。
Re:キャストかぁ! (スコア:1)
>OS君が...なのですね
そですね。
>それをやってくれないOS君だと、もろとも死亡…ああやだやだ
>#そんなOSってあるのか? :P
昔は皆そうだったし、今でも組み込み系はやってくれない事が多いよ。
そもそもMMUとかOS自体がないことも多いし。
# なに、MMUなんかなくてもちゃんと組めば出丈夫さ。