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