Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;释放模式下静态变量初始化错误_C++_Stl_Static_Release - Fatal编程技术网

C++ c++;释放模式下静态变量初始化错误

C++ c++;释放模式下静态变量初始化错误,c++,stl,static,release,C++,Stl,Static,Release,项目环境: windows 7 x64 pro Visual Studio 2008 C++ SP1 PRBR win32 api directx 9.0c 2010年6月 促进 问题: 我的项目在调试模式下成功运行。但只会发生释放模式错误 template <typename T> class SceneVector : public std::vector<T> { public: SceneVector() { for(int i =

项目环境:
windows 7 x64 pro
Visual Studio 2008 C++ SP1 PRBR win32 api
directx 9.0c 2010年6月
促进

问题:
我的项目在调试模式下成功运行。但只会发生释放模式错误

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;
步骤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)(由调试器的观察者执行。但由于发布模式的原因,它不可靠)并且访问冲突异常

但在调试模式下,不会发生错误。
我真的不知道为什么会发生这个问题。
谁来帮帮我

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

将警告级别调高。默认值太低。在旧版本的DevStudio中,我总是将其设置为最大值。在新版本中,它们有一个新的更高的最大值,这正是达到最高值的方式(但我没有看到)。同时选中“将警告视为错误”的框。现在尝试重新构建。为了帮助解决此类问题,您需要将代码减少到最小的可编译示例,在发布之前显示问题。通常,这个过程会让你找到问题,如果没有,那么你会有一百万双眼睛可以看到真正的代码。以下划线开头的标识符通常为实现保留。因此,
\u Vec
使您的代码不符合要求,因此在技术上无效。请参阅
名称空间stdext
中使用的保留标识符,听起来它实际上可能来自实现。谢谢,我无法理解文档的所有含义,但我知道一件事:不要从STL容器继承
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;
    }