私はCDT、MinGW、GDBでEclipseを使ってCで研究プロジェクトを進めています。デバッガでエラーを再現できません
私は0から3までの要素を持つint配列を持っています。私は配列を繰り返して、番号を入れ替えています。私は、どこかで私の境界を覗き見せずに数字を混乱させた場合には、私のデフォルトのケースでアサート(0)を張りました。罰金 - 私はどこかでうんざりして、範囲外の数が息を呑んでいます。それは私が扱うことができるものです。問題は、デバッガでプログラムを実行すると、すべて正常に動作することです。アサーションは決して発動せず、結果は正しいものとなり、問題はありません。私は、デバッグ中にエラーを再現することができないという事実よりもエラーがあるという事実をあまり心配していません。
ここに関連コードがあります。すべての%3 = 0のint * zeroPairsの要素は、0と3の間にあります。次の2つの要素は、異なる配列へのインデックスであり、さまざまな数にすることができます。 j * 3はゼロペアの範囲外に出ることはありません。配列A、B、CおよびDは、各インデックスに1または-1しか含まれていません。私は典型的なA = temp、A = Bなどのスワップがあったときにうまくいきました。私が単純化したときに、それぞれの記号を変更するだけで、このエラーが起きたのです。
ありがとうございます!
for (j = 0; j < bits; ++j) {
if (k & (1 << j)) { //Check if a bit is set, if so, swap the correct elements
switch (zeroPairs[j * 3]) {
case 0:
A[zeroPairs[j * 3 + 1]] = -A[zeroPairs[j * 3 + 1]];
A[zeroPairs[j * 3 + 2]] = -A[zeroPairs[j * 3 + 2]];
break;
case 1:
B[zeroPairs[j * 3 + 1]] = -B[zeroPairs[j * 3 + 1]];
B[zeroPairs[j * 3 + 2]] = -B[zeroPairs[j * 3 + 2]];
break;
case 2:
C[zeroPairs[j * 3 + 1]] = -C[zeroPairs[j * 3 + 1]];
C[zeroPairs[j * 3 + 2]] = -C[zeroPairs[j * 3 + 2]];
break;
case 3:
D[zeroPairs[j * 3 + 1]] = -D[zeroPairs[j * 3 + 1]];
D[zeroPairs[j * 3 + 2]] = -D[zeroPairs[j * 3 + 2]];
break;
default:
printf("Whoops %d", zeroPairs[j * 3]);
fflush(stdin);
assert(0);
}
}
}
少し詳しい情報が必要です。すべての変数が適切に初期化されていることを確認しましたか? – celavek