1

プログラムにいくつかの関数を追加した後、バッファオーバーフローエラーが突然表示されるプログラムの1つに問題があります。このエラーは、プログラムの最初に表示されました。このセクションは、私が追加した新しいコードとはまったく関係がありませんでした。バグの原因を絞り込むためにいくつかのブレークポイントを配置した後、次の実行でエラーは消えました。

誰かが私に、どのような状況が私が遭遇した問題を引き起こしたのかを簡単に概念的に説明できますか?私はあなたに私のコードをデバッグするように頼んでいるのではなく、何が起こったのかについての洞察を私に与えて、私が再び問題に遭遇するのを避けることができるようにします。

4

2 に答える 2

1

このバグには、事前に割り当てられた (つまり、コンパイル時に割り当てられた) ストレージ配列に対して動的データが長くなりすぎるという匂いがありますが、エラーメッセージ「バッファオーバーフロー」は偶然の赤いニシンに過ぎないと思います。最初のステップとして、すべての静的配列のサイズを 2 倍にするか、100,000 のようにサイズを大きくして、プログラムを再実行します。プログラムが正常に実行される場合は、コードを調べて問題のあるセクションを見つけることができます。

それでもプログラムが失敗する場合は、見つけにくいバグに直面しています。

HTH

-- ピート

于 2011-01-31T23:16:26.547 に答える
0

ASSERT でいっぱいのコードを埋めてください! 地獄のような経験から学んだことで、バッファ処理コードを扱うときに自然に行うようになりました。

于 2011-02-01T00:25:21.820 に答える