デバッグが途中で止まる

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
CFD田中

デバッグが途中で止まる

#1

投稿記事 by CFD田中 » 7年前

初めまして。 C言語は最近使い始めたばかりの初心者です。
http://th.nao.ac.jp/MEMBER/tomisaka/Lec ... 0000000000
このプログラムをVisual C++ 2010で作っているのですが、
http://ideone.com/5ccG50
93行目からの行列計算の部分でデバッグが止まってしまいます。
(この部分を消去すると最後まで実行されます。)
行列計算以後の部分にブレークポイントを作って配列Aの中を見ると、計算はされているようです。
ご教授よろしくお願いいたします。

YuO
記事: 941
登録日時: 9年前
住所: 東京都世田谷区

Re: デバッグが途中で止まる

#2

投稿記事 by YuO » 7年前

ソースコードは,ideoneへのリンクではなく,掲示板本文にcodeタグを使って貼り付けるようにして下さい。

トレースポイントを93行目に置いてトレース文字列を"m = {m} / j = {j}"として実行してみたところ,

コード:

m = 0 / j = 0
m = 3 / j = 1
m = 3 / j = 2
m = 3 / j = 3
m = 3 / j = 4
m = 3 / j = 5
m = 3 / j = 6
m = 3 / j = 7
m = 3 / j = 8
m = 3 / j = 9
m = 3 / j = 10
m = 3 / j = 11
m = 3 / j = 12
m = 3 / j = 13
m = 3 / j = 14
m = 3 / j = 15
m = 3 / j = 16
m = 3 / j = 17
m = 3 / j = 18
m = 3 / j = 19
m = 3 / j = 20
m = 3 / j = 21
m = 3 / j = 22
m = 3 / j = 23
m = 3 / j = 24
m = 3 / j = 25
m = 3 / j = 26
m = 3 / j = 27
m = 3 / j = 28
m = 3 / j = 29
m = 3 / j = 30
m = 3 / j = 31
m = 3 / j = 32
m = 3 / j = 33
m = 3 / j = 34
m = 3 / j = 35
m = 3 / j = 36
m = 3 / j = 37
m = 3 / j = 38
m = 3 / j = 39
m = 3 / j = 40
m = 3 / j = 41
m = 3 / j = 42
m = 3 / j = 43
m = 3 / j = 44
m = 3 / j = 45
m = 3 / j = 46
m = 3 / j = 47
m = 3 / j = 48
m = 3 / j = 49
m = 3 / j = 50
m = 3 / j = 51
m = 3 / j = 52
m = 3 / j = 53
m = 3 / j = 54
m = 3 / j = 55
m = 3 / j = 56
m = 3 / j = 57
m = 3 / j = 58
m = 3 / j = 59
m = 3 / j = 60
m = 3 / j = 61
m = 3 / j = 62
m = 3 / j = 63
m = 3 / j = 64
m = 3 / j = 65
m = 3 / j = 66
m = 3 / j = 67
m = 3 / j = 68
m = 3 / j = 69
m = 3 / j = 70
m = 3 / j = 71
m = 3 / j = 72
m = 3 / j = 73
m = 3 / j = 74
m = 3 / j = 75
m = 3 / j = 76
m = 3 / j = 77
m = 3 / j = 78
m = 3 / j = 79
m = 3 / j = 80
m = 3 / j = 81
m = 3 / j = 82
m = 3 / j = 83
m = 3 / j = 84
m = 3 / j = 85
m = 3 / j = 86
m = 3 / j = 87
m = 3 / j = 88
m = 3 / j = 89
m = 3 / j = 90
m = 3 / j = 91
m = 3 / j = 92
m = 3 / j = 93
m = 3 / j = 94
m = 3 / j = 95
m = 3 / j = 96
m = 3 / j = 97
m = 3 / j = 98
m = 3 / j = 99
m = 4 / j = 0
m = 3 / j = 1
(以下3行目からを繰り返し)
のように,j != 0で常にm == 3となる結果が得られました。
# トレースポイントはVisual C++ 2010 Expressでは残念ながら使えません。printf等で代用してください。

コードを見直すと,一番外側のループのループ変数がmであるのに,行列計算中のループ変数もmを使っています。
外側のmまたは内側のmを使っていない変数kにすることで,おそらくちゃんとループから抜けることが出来ると思います。
ただ,
  • 関数化を行う
  • 変数宣言の局所化を行う
    VC++のようにC99非対応でも,複文の{の最初に変数を宣言できるので,多重ループのループ変数は一つ外側のループの複文の最初で宣言するようにする
あたりを行うことで,バグの混入の可能性自体を減らせるかと思います。

かずま

Re: デバッグが途中で止まる

#3

投稿記事 by かずま » 7年前

CFD田中 さんが書きました: 93行目からの行列計算の部分でデバッグが止まってしまいます。
46行目で使っているループ変数 m の値を、94行目のループ変数 m でぶっ壊しています。

CFD田中

Re: デバッグが途中で止まる

#4

投稿記事 by CFD田中 » 7年前

YuOさん、かずまさん回答ありがとうございました。
変数が被らないようにと気をつけていたのに、書き込んでいるうちにそのことを忘れてしまったのが問題ですね。。。
ミスの指摘に加えて対処法まで教えていただき、ありがとうございます。

>>ソースコードは,ideoneへのリンクではなく,掲示板本文にcodeタグを使って貼り付けるようにして下さい。
申し訳ございませんでした。以後そうするようにします。

閉鎖

“C言語何でも質問掲示板” へ戻る