アカウント名:
パスワード:
movl $5, %eax movl %eax, 4(%esp) movl $.LC0, (%esp) call printf
*n に入るべき値を %eax に代入しなおして、そっちを printf() に渡しているだけで。 実はその前の1行:
movl $5, (%eax)
が死ぬほどやばい。%eax は main() 関数に入ってきて以来、初期化されていない。その「どこを指しているんだかよく判らないもの」が指している所にドガンッと5を書いちゃってる
実行コードとスタックとヒープが完全に別のメモリ空間になっていて、ヒープ空間はint*の値が如何様な値を取ろうがメモリ空間が存在する処理系で、プロセス毎にそのメモリ空間のどこをアクセスしようが問題ない処理系であるなら、修正前のソースコードでもまったく問題ない
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
日々是ハック也 -- あるハードコアバイナリアン
オプティマイザの魔法? (スコア:1)
もしかして無意識にオプティマイザに助けられていて意識するのを忘れていたとか?
-- やさいはけんこうにいちば〜ん!
Re: (スコア:3, 参考になる)
*n に入るべき値を %eax に代入しなおして、そっちを printf() に渡しているだけで。
実はその前の1行:
が死ぬほどやばい。
%eax は main() 関数に入ってきて以来、初期化されていない。
その「どこを指しているんだかよく判らないもの」が指している所にドガンッと5を書いちゃってる
fjの教祖様
Re: (スコア:0)
しかし、多くの人はそんな過保護な環境ではないのだけどね。
Re:オプティマイザの魔法? (スコア:0)
int* p1;
int* p2;
*p1=1;
*p2=2;
printf("%d",*p1); /* 先生!! メモリが破壊されました!! */
#if 0
まさか全てのポインタは自動的に異なるアドレスで初期化されて、
そのアドレスは絶対他の変数にアロケートされない環境ですか!?
なんて過保護な(w
#end if