2

プロジェクト環境:
Windows 7 x64 プロ
ビジュアル スタジオ 2008 c++ sp1 プロ
win32 api
directx 9.0c 2010 年 6 月
ブースト

質問:
私のプロジェクトは DEBUG モードで正常に実行されます。ただし、リリース モード エラーのみが発生します。

template <typename T>
class SceneVector : public std::vector<T>
{
public:
    SceneVector()
    {
        for(int i = 0 ; i < MAX_OBJNODE_NUMBER ; ++i) push_back(NULL);
    }
}; 



//i think the class's contents are not important
class ITaggingDebugInfo
{
protected:
    int idvl;
public:
    ITaggingDebugInfo();
    ~ITaggingDebugInfo();
    int iTaggindDebugInfoID;
    virtual std::vector<AbstractTag*> OnMakeTagList(int VlogicPackageID);
    static void Select(int vlid, int id);
    static stdext::hash_map<int,SceneVector<ITaggingDebugInfo*>> TaggingDebugInfoManager; //problem
    static std::vector<AbstractTag*> taglist[MAX_SCENE_NUMBER];             
};

//on other's cpp file
stdext::hash_map<int,SceneVector<ITaggingDebugInfo*>> ITaggingDebugInfo::TaggingDebugInfoManager;

static hash_map のコンストラクターを使用すると、リリース モードの問題が発生します。
これが私のSTLデバッグステップです。ステップ1

hash_map()
: _Mybase(key_compare(), allocator_type())
    {   // construct empty map from defaults
    }

ステップ2

    explicit _Hash(const key_compare& _Parg,
    const allocator_type& _Al)
    : _Traits(_Parg), _List(_Al),
        _Vec(_Al),
        _Max_bucket_size(_Bucket_size)
    {   // construct empty hash table
    _Init();
    }

ステップ 3

void _Init(size_type _Buckets = min_buckets)
    {   // initialize hash table with _Buckets buckets, leave list alone
    _Vec.assign(_Buckets + 1, end());
    _Mask = _Buckets - 1;
    _Maxidx = _Buckets;
    }

手順 3 のとき、このポインタは NULL(0x00000000) であり (デバッガのウォッチャーによる。ただし、リリース モードのため確信が持てません)、アクセス違反例外が発生します。

しかし、DEBUG モードではエラーは発生しません。
なぜこの問題が起こるのか本当にわかりません。誰か助けて!

4

1 に答える 1

3

vector仮想デストラクタを提供しないため、STL コンテナから派生することは想定されていません。あなたが経験している行動は、これが原因であると思われます。ここでそれを行うことに関するすべての長所と短所を読んでください: Thou shalt not inherit from std::vector

于 2012-08-12T07:01:18.783 に答える