回答編集履歴
2
アドレスについて
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
関係なくはなかった
answer
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
ポインタ型とか
|
1
|
+
ポインタ型とかそれ以前に、配列が範囲外アクセスになっています。
|
2
2
|
例えば、i=0の時j=3となって、
|
3
3
|
渡しているのがint*[3]なので、
|
4
4
|
*x[j]で範囲外アクセスになっています。
|