1

私が作業しているいくつかのコードには奇妙な問題があります: 私が知る限り、またチェックした限り、システム時間などのランダムなものに依存するコンポーネントはコードにありません。コードにブレークポイントを追加するだけで、プログラムの動作が変わります。動作が異なるだけです (コード内で値によって選択されるオブジェクトがいくつかありますが、それらの値はすべて 0 です。ブレークポイントを追加するときに、値が 0 である別のオブジェクトを選択するだけです)。 . 残念ながら、コードが多すぎるため、コードを投稿することはできません。

この種の動作の原因は何ですか?

編集:私は問題にもう少し時間を費やしました:それはブレークポイント自体に関連していないようです-異なる結果を生成する「最も簡単な」方法は次のとおりです:プロジェクトの別の.cppファイルからデバッグプロセスを開始するとき出力はすでに変化しています。「自動的にビルド」を無効にすると、これはもう起こりません。そのことから、コードに変更がなくても、何かが再構築されると結論付けています。また、実際に異なる動作を引き起こすクラスに絞り込みました。これは、フィボナッチ ヒープの実装です。

4

1 に答える 1

0

Windows で実行していない場合は、 Valgrindの使用を検討してください。これらはサポートされているプラ​​ットフォームです。Memcheckツールは、初期化されていない変数の使用を追跡するために、すべてのメモリ参照を調べてプログラムを (低速で) 実行します

Memcheck は、プログラムが次のことを検出できます。

  • すべきではないメモリにアクセスします (まだ割り当てられていない領域、解放された領域、ヒープ ブロックの末尾を超えた領域、スタックのアクセスできない領域)。
  • 危険な方法で初期化されていない値を使用します。
  • メモリリークします。
  • ヒープ ブロックの不適切な解放 (二重解放、不一致の解放) を行います。
  • オーバーラップするソースおよびデスティネーション メモリ ブロックを memcpy() および関連する関数に渡します。
于 2013-03-19T22:52:17.393 に答える