回答編集履歴

1

回答を修正

2020/01/11 12:33

投稿

rubato6809
rubato6809

スコア1380

test CHANGED
@@ -20,7 +20,7 @@
20
20
 
21
21
  rank() 関数に2つの引数が渡されます。その2つは
22
22
 
23
- ``` void rank(SC table[], SC* rank_array[]) ```
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
- ``` rank_array = &table; ``` の一行で、table ポインタ変数をポイントするように、値が書き換えられてしまいます。ここが大きな勘違いの元でしょう。その後、ソートする二重 for ループの中で rank_array[1] 等をアクセスしてしまいますが、図に描いたように
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