質問するログイン新規登録

回答編集履歴

1

記述の修正

2021/12/15 23:39

投稿

thkana
thkana

スコア7738

answer CHANGED
@@ -10,7 +10,7 @@
10
10
  これが無効なアドレスにアクセスすると強制終了する...の流れです。
11
11
 
12
12
  決して「C言語が」強制終了させているわけではないことに注意。というのは、今回は初期化した値が確実に0だったのでOSが確実に検知できてキレイに強制終了になりましたが、そうでない場合もあるから。
13
- C言語では「ローカル変数は意図的に初期化しない限り初期値不定(プログラムを実行してみるまで値が何になるか決まらない)」ということになっています。そういう条件下で生成したヘンな値を持ったポインタ、あるいは単に計算を間違えてヘンな値が入っていても同じことですが、これがたまたまOSから使用許可をもらっているアドレス値になっていて、そこにアクセスして他の(ソースコード上ではなんの関わりもない他の変数等を)書き換えてしまうことはあり得るわけです。
13
+ C言語では「ローカル変数は意図的に初期化しない限り初期値不定(プログラムを実行してみるまで値が何になるか決まらない)」ということになっています。そういう条件下で生成したヘンな値を持ったポインタ、あるいは単に計算を間違えてヘンな値が入っていても同じことですが、これがたまたまOSから使用許可をもらっているアドレス値になっていて、そこにアクセスして他のソースコード上ではなんの関わりもない他の変数等を書き換えてしまうことはあり得るわけです。
14
14
  そうなると、
15
15
  ・C言語そのものにはヘンなアドレスへのアクセスを止める仕組みはない
16
16
  ・OSも、許可を与えたアドレス範囲内のアクセスのミスは検知できない