gpt4 book ai didi

c++静态变量在 Release模式下初始化错误

转载 作者:搜寻专家 更新时间:2023-10-31 01:52:54 25 4
gpt4 key购买 nike

项目环境:
Windows 7 x64 专业版
visual studio 2008 c++ sp1 专业版
win32 接口(interface)
directx 9.0c 2010 年 6 月
提升

问题:
我的项目在 DEBUG 模式下成功运行。但只发生 Release模式错误。

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的构造函数出现release模式问题。
这是我的 STL 调试步骤。第一步

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 步时,this 指针为 NULL(0x00000000)(通过调试器的观察者。但由于 Release模式,它并不可靠)和访问冲突异常。

但在 DEBUG 模式下不会发生错误。
我真的不知道为什么会出现这个问题。有人帮帮我!

最佳答案

您不应该从像 vector 这样的 STL 容器派生,因为它们不提供虚拟析构函数。我怀疑你正在经历的行为可能是因为这个。在这里阅读所有关于这样做的利弊:Thou shalt not inherit from std::vector

关于c++静态变量在 Release模式下初始化错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11920222/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com