回答編集履歴

2

アドレスについて

2016/02/12 11:47

投稿

ozwk
ozwk

スコア13528

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

1

関係なくはなかった

2016/02/12 11:47

投稿

ozwk
ozwk

スコア13528

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