回答編集履歴
1
回答を修正
test
CHANGED
@@ -20,7 +20,7 @@
|
|
20
20
|
|
21
21
|
rank() 関数に2つの引数が渡されます。その2つは
|
22
22
|
|
23
|
-
|
23
|
+
void rank(SC table[], SC* rank_array[])
|
24
24
|
|
25
25
|
ですから、table ポインタ変数と rank_array ポインタ変数です。
|
26
26
|
|
@@ -30,9 +30,7 @@
|
|
30
30
|
|
31
31
|
しかし問題は rank_array ポインタ変数です。rank() 関数が呼ばれた時点では main() の rank_arrya[3] の先頭アドレスをポイントしていましたが、関数に入った途端に
|
32
32
|
|
33
|
-
|
34
|
-
|
35
|
-
**rank_array[1] とは table ポインタ変数に隣接するメモリになってしまい、このメモリはSC型構造体をポイントする変数ではない**ので、この辺りで Segmentation Faultが起こるのは無理からぬ事です。
|
33
|
+
rank_array = &table; の一行で、table ポインタ変数をポイントするように、値が書き換えられてしまいます。ここが大きな勘違いの元でしょう。その後、ソートする二重 for ループの中で rank_array[1] 等をアクセスしてしまいますが、図に描いたように、 **rank_array[1] とは table ポインタ変数に隣接するメモリになってしまい、このメモリはSC型構造体をポイントする変数ではない** ので、この辺りで Segmentation Faultが起こるのは無理からぬ事です。
|
36
34
|
|
37
35
|
|
38
36
|
|