に反復しない::マップは、従来のMFCアプリケーションでthusly宣言:のstd ::マップのイテレータは、私はSTDを持っているMFCアプリ
typedef std::map<long, CNutrientInfo> NUTRIENT_INFO_MAP;
typedef NUTRIENT_INFO_MAP::const_iterator NUTRIENT_INFO_ITER;
typedef NUTRIENT_INFO_MAP::value_type NUTRIENT_INFO_PAIR;
static NUTRIENT_INFO_MAP m_NutrientInfoMap;
m_NutrientInfoMapは時にアプリのロードテーブルをループして作成することによって移入されますCNutrientInfoのインスタンスと、その後のstdに挿入:などのマップ:
m_NutrientMapInfo.insert(NUTRIENT_INFO_PAIR(nutrient.GetId(), nutrient));
のstdは::マップは現在のデータベースで定義されている栄養素のリストが含まれています。ある時点で、ユーザーはこの栄養素を新しい栄養素に加えることができ、ユーザーが追加しているものが既にリストに存在するかどうかを確認する。それは次のようなチェックを行います:
NUTRIENT_INFO_ITER iter = m_NutrientInfoMap.begin();
while (iter != m_NutrientInfoMap.end())
{
m = (*iter).second;
if (_stricmp(m.GetFullName().c_str(), name.c_str()) == 0)
{
return m;
}
iter++;
}
または少なくともそうなっています。関数が実際に呼び出されると、whileループの最初の行を越えて進まない。ブレークポイントを設定すると、問題の行が何度も繰り返し呼び出され、それを越えて進まず、アプリケーションが停止します。実際の比較に入ると、それは正しく比較され、whileループラインに戻ります。ループの本体に進入するために再びステップインすると、whileループラインに戻ります。この同じロジックは、アプリケーションのどこかで問題なく使用されるので、この場合は何が起こっているのか分かりません。私はfor-loopを使って上記のロジックを書き直しました。うまく動くので、私はそれを回避することができませんが、C++は私の最強の言語ではありません。これは、サポートをお手伝いしている私は、これが将来の参照のために何をしているのか、実際に学び理解したいと思っています。加えて、ロジックは他の場所で動作し、ここには存在しないため、おそらく実際に対処する必要がある根本的な原因があります。
これに関するご意見やご感想をお待ちしております。
ありがとうございます。
リリースモードでデバッグしていますか? –