-1

重複の可能性:
要素が std::map に挿入されるタイミングを検出する

マップへの 137 要素の挿入を追跡します。VS2010 デバッガーを使用してマップのサイズを確認すると、確かに 137 になります。printf を使用して、マップのすべての要素を出力します。

(it = map.begin();it !=map.end();++it) {
   printf ("%x",it->second);
}

その結果、137 個の値が出力されます。その後、私のプログラムは引き続き実行されます。そして、実行の終わり近くで、マップの値を処理する必要があります。

もう一度デバッガーで 137 個の要素があることを確認しますが、以前のようにすべてを印刷すると、最後の値が無効な値である場合に 138 個の値が印刷されます。

それがどのように/いつ発生し、何が原因map.end()でシフトするかを理解する必要があります。

4

1 に答える 1

0

コードがないとわかりにくいです。推測できます。マップに追加する演算子を書き直し、追加するたびにマップのサイズを確認することをお勧めします。サイズが 137 を超えると、プログラムが GPF になります (または、デバッガーが壊れる関数を呼び出します)。プログラムをデバッガーで実行し、ビンゴを実行すると、スタック トレースによって問題の場所がわかります。

于 2012-08-31T21:03:52.840 に答える