• ベストアンサー

Segmentation fault

最短経路問題を解くプログラムを作って完成したのですが、でる時は連続して出てしまうのですが Segmentation fault (core dumped) と表示されてしまいプログラムが実行中なのに途中で終わってしまいます.ほんとうならネットワークの直径が表示されるんですが。。 gcc daijkstra.c ./a アクセスポイント>>> 90 全ネットワーク数>>> 50 Segmentation fault (core dumped) (表示された場合.) gcc daijkstra.c ./a アクセスポイント>>> 90 全ネットワーク数>>> 50 直径>>>>4.432 (成功した場合.)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

無限再帰してスタックオーバフローしたんじゃないでしょうか。

noname#45110
質問者

お礼

新しく質問を作ったので見てください 回答ありがとうございます

その他の回答 (3)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

daijkstra(che); の直前に fprintf(stderr, "e = %d, che = %d\n", e, che); みないな行を入れて e と che の値を表示させてみるとか. 場合によっては関数 daijkstra の中で count の中身を変更しているために無限ループになってる可能性もありますけど. 蛇足ですが最短経路アルゴリズムなら Dijkstra だと思う.

noname#45110
質問者

お礼

スペルミスですね。すみません 新しく質問を作ったので見てください 回答ありがとうございます

  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

せめて for(e = 0;count[e] != -1;e++){ if (e >= 10000) { printf("error"); return 1; } che = count[e]; daijkstra(che); } とか

noname#45110
質問者

お礼

新しく質問を作ったので見てください 回答ありがとうございます

  • Interest
  • ベストアンサー率31% (207/659)
回答No.1

で、ご質問は何でしょうか? セグメンテーションフォルトの原因を探りたいのですか? どこでメモリを壊しているかは、ソースコードを見てみないと分かりませんよ。

noname#45110
質問者

補足

すみませんソースはわけあって載せることが出来ません、すみません gdbで調べてみたんですが Program received signal SIGSEGV, Segmentation fault. 0x00401653 in probe () (gdb) where #0 0x00401653 in probe () #1 0x000002b9 in ?? () #2 0x004014e0 in daijkstra (a=529) at C_2~extra.c:100 #3 0x00401637 in daijkstra (a=648) at C_2~extra.c:129 #4 0x00401637 in daijkstra (a=37) at C_2~extra.c:129 #5 0x00401637 in daijkstra (a=659) at C_2~extra.c:129 #6 0x00401637 in daijkstra (a=9) at C_2~extra.c:129 #7 0x00401637 in daijkstra (a=171) at C_2~extra.c:129 #8 0x00401637 in daijkstra (a=79) at C_2~extra.c:129 #9 0x00401637 in daijkstra (a=249) at C_2~extra.c:129 #10 0x00401637 in daijkstra (a=298) at C_2~extra.c:129 #11 0x00401637 in daijkstra (a=542) at C_2~extra.c:129 #12 0x00401637 in daijkstra (a=235) at C_2~extra.c:129 #13 0x00401637 in daijkstra (a=83) at C_2~extra.c:129 #14 0x00401637 in daijkstra (a=287) at C_2~extra.c:129 #15 0x00401637 in daijkstra (a=144) at C_2~extra.c:129 #16 0x00401637 in daijkstra (a=380) at C_2~extra.c:129 #17 0x00401637 in daijkstra (a=179) at C_2~extra.c:129 #18 0x00401637 in daijkstra (a=130) at C_2~extra.c:129 #19 0x00401637 in daijkstra (a=2) at C_2~extra.c:129 #20 0x00401637 in daijkstra (a=34) at C_2~extra.c:129 #21 0x00401637 in daijkstra (a=321) at C_2~extra.c:129 #22 0x00401637 in daijkstra (a=148) at C_2~extra.c:129 #23 0x00401637 in daijkstra (a=358) at C_2~extra.c:129 ---Type <return> to continue, or q <return> to quit---continu #24 0x00401637 in daijkstra (a=17) at C_2~extra.c:129 #25 0x00401637 in daijkstra (a=6) at C_2~extra.c:129 #26 0x00401637 in daijkstra (a=5) at C_2~extra.c:129 #27 0x00401637 in daijkstra (a=49) at C_2~extra.c:129 #28 0x00401637 in daijkstra (a=302) at C_2~extra.c:129 #29 0x00401637 in daijkstra (a=12) at C_2~extra.c:129 #30 0x00401637 in daijkstra (a=18) at C_2~extra.c:129 #31 0x00401637 in daijkstra (a=40) at C_2~extra.c:129 #32 0x00401637 in daijkstra (a=105) at C_2~extra.c:129 #33 0x00401637 in daijkstra (a=25) at C_2~extra.c:129 #34 0x00401637 in daijkstra (a=14) at C_2~extra.c:129 #35 0x00401637 in daijkstra (a=20) at C_2~extra.c:129 #36 0x00401637 in daijkstra (a=16) at C_2~extra.c:129 #37 0x00401637 in daijkstra (a=126) at C_2~extra.c:129 #38 0x00401637 in daijkstra (a=8) at C_2~extra.c:129 #39 0x00401637 in daijkstra (a=15) at C_2~extra.c:129 #40 0x00401637 in daijkstra (a=21) at C_2~extra.c:129 #41 0x00401637 in daijkstra (a=23) at C_2~extra.c:129 #42 0x00401637 in daijkstra (a=3) at C_2~extra.c:129 #43 0x00401637 in daijkstra (a=11) at C_2~extra.c:129 #44 0x00401637 in daijkstra (a=32) at C_2~extra.c:129 #45 0x00401637 in daijkstra (a=28) at C_2~extra.c:129 #46 0x00401637 in daijkstra (a=30) at C_2~extra.c:129 #47 0x00401637 in daijkstra (a=19) at C_2~extra.c:129 こんな感じに表示され 129行目は for(e = 0;count[e] != -1;e++){ che = count[e]; ← ここです daijkstra(che); } count[10000] で定義しています. この部分は始点からアクセスでき点を再帰する部分です -1 はターミネータみたいなものです.

関連するQ&A

専門家に質問してみよう