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

回答編集履歴

2

アドレスについて

2016/02/12 11:47

投稿

ozwk
ozwk

スコア13553

answer CHANGED
@@ -1,4 +1,14 @@
1
1
  ポインタ型とかそれ以前に、配列が範囲外アクセスになっています。
2
2
  例えば、i=0の時j=3となって、
3
3
  渡しているのがint*[3]なので、
4
- *x[j]で範囲外アクセスになっています。
4
+ *x[j]で範囲外アクセスになっています。
5
+
6
+ ざっくり補足:
7
+ `int x[1]`に対して`x[1]`にアクセスしても実行できることがあります。
8
+ `x[1]`は`x[0]`の`int`ひとつ分進んだアドレスに格納された値なので
9
+ `x[1]`には不定な値が入っています。
10
+
11
+ `int *xp[1]`に対して`*xp[1]`にアクセスすると落ちることがあります。(質問文のコードがこの状況)
12
+ `xp[1]`には同様に変な値が入ってます。例えば-2000とか入ってたりしたとします。
13
+ *xp[1]にアクセスしようとすると、アドレス-2000番の値を拾ってこようとして、
14
+ 「いやそんなメモリ番地ないよ」と異常終了します。

1

関係なくはなかった

2016/02/12 11:47

投稿

ozwk
ozwk

スコア13553

answer CHANGED
@@ -1,4 +1,4 @@
1
- ポインタ型とか一切関係なくただの配列範囲外アクセスす。
1
+ ポインタ型とかそれ以前に、配列範囲外アクセスになっています。
2
2
  例えば、i=0の時j=3となって、
3
3
  渡しているのがint*[3]なので、
4
4
  *x[j]で範囲外アクセスになっています。