0

マップを使用してさまざまなデータ型を含むクラスがあります。クラスは、デバッグおよびリリース モードで正しく機能します。ただし、プログラムをデバッグしようとすると、デバッガーはクラス内の複数のマップに何があるかを判断できません。通常、他の場所からのメモリ破損が疑われますが、プログラムの実行中にメモリ エラーは発生せず、問題なく値が設定および取得されます。

デバッガー エラーの例を次に示します。マップ内の要素の数は正しく報告されますが、値はエラーです。興味深いことに、マップを含むクラスのメンバー関数内でブレークすると、このエラーは発生せず、すべての値が表示されます。また、奇妙なことに、文字列マップは問題なく表示されます。

Windows 7 (64 ビット) で Visual Studio 2008 (SP1) を使用しています。クラス コードは実際には、デバッグ中のクライアント プログラムによって起動時に読み込まれる DLL 内にあります (違いがある場合)。どんなアイデアでも大歓迎です。 ここに画像の説明を入力

class DataTable {
public:
    std::string get_string(std::string);
    float get_float(std::string);
            (etc.)

    void set_string(std::string, std::string);
    void set_float(std::string, float);
            (etc.)

protected:
    std::map<std::string, std::string> m_string_map;
    std::map<std::string, float> m_float_map;
            (etc.)
}
4

1 に答える 1

1

std::map を使用しているときは、デバッグ目的のためだけに回避策を実行しています。

#ifdef _DEBUG
uint32_t num_strings_in_map = (uint32_t)m_string_map.size();
uint32_t num_floats_in_map = (uint32_t)m_float_map.size();
#endif

その後、ブレークポイントを設定したり、数値を画面に出力したりできます...

于 2012-10-19T13:46:42.700 に答える