プロジェクト環境:
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 モードではエラーは発生しません。
なぜこの問題が起こるのか本当にわかりません。誰か助けて!