0

誰かが私を理解するのを手伝ってくれるかもしれない非常に奇妙なエラーに遭遇しました。ベクトルが範囲外エラーで一貫してクラッシュするコードがあります。このエラーのもう 1 つの奇妙な点は、エラーの場所を突き止めるためにコード全体に多数の cout ステートメントを挿入すると、クラッシュが停止することです。

とにかく、さらなるテストとして、コードの一部に try/catch ブロックを配置しました。実装は次のようになります。

try {
    // my code that is presumably causing problems
  }
  catch (out_of_range& oor) {
    cerr << "Out of Range error: " << oor.what() << endl;
  }

このコードを追加すると、バグが消えたようです。クラッシュはなくなり、キャッチに cerr メッセージが表示されることもありません。

これが理にかなっている方法はありますか?

4

1 に答える 1

1

デバッガーで古いコードをステップスルーし、エラーを切り分けます。デバッガーで新しいコードをステップ実行し、エラー以外を切り分けます。私はこれをコメントではなく「回答」として投稿しています。これは、私たちが回答したり、回答を読んだりするよりも短い時間で、探している回答が得られるためです。

10語でデバッガー:-g、google "gdb cheatsheet"を使用してコンパイルすると、非常に簡単です。

于 2012-07-04T02:31:34.603 に答える