Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.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++ std::无序映射向量下标超出范围_C++_Stl_Unordered Map - Fatal编程技术网

C++ std::无序映射向量下标超出范围

C++ std::无序映射向量下标超出范围,c++,stl,unordered-map,C++,Stl,Unordered Map,我使用std::unordered_map来保存一些值,并且在添加新值时得到“向量下标超出范围”。我正在使用Visual Studio 2012,错误跟踪为: std::vector<std::_List_unchecked_iterator<std::_List_val<std::_List_simple_types<std::pair<void * const,unsigned int> > > >,std::_Wrap_alloc<

我使用
std::unordered_map
来保存一些值,并且在添加新值时得到“向量下标超出范围”。我正在使用Visual Studio 2012,错误跟踪为:

std::vector<std::_List_unchecked_iterator<std::_List_val<std::_List_simple_types<std::pair<void * const,unsigned int> > > >,std::_Wrap_alloc<std::allocator<std::_List_unchecked_iterator<std::_List_val<std::_List_simple_types<std::pair<void * const,unsigned int> > > > > > >::operator[](unsigned int _Pos) Line 1140  C++
std::_Hash<std::_Umap_traits<void *,unsigned int,std::_Uhash_compare<void *,std::hash<void *>,std::equal_to<void *> >,std::allocator<std::pair<void * const,unsigned int> >,0> >::_Vec_lo(unsigned int _Bucket) Line 907    C++
std::_Hash<std::_Umap_traits<void *,unsigned int,std::_Uhash_compare<void *,std::hash<void *>,std::equal_to<void *> >,std::allocator<std::pair<void * const,unsigned int> >,0> >::_End(unsigned int _Bucket) Line 936   C++
std::_Hash<std::_Umap_traits<void *,unsigned int,std::_Uhash_compare<void *,std::hash<void *>,std::equal_to<void *> >,std::allocator<std::pair<void * const,unsigned int> >,0> >::_Insert<std::pair<void * const,unsigned int>,std::_Nil>(std::pair<void * const,unsigned int> && _Val, std::_Nil _Pnode) Line 872  C++
std::_Hash<std::_Umap_traits<void *,unsigned int,std::_Uhash_compare<void *,std::hash<void *>,std::equal_to<void *> >,std::allocator<std::pair<void * const,unsigned int> >,0> >::insert(std::pair<void * const,unsigned int> && _Val) Line 371 C++
其中_Vec是空向量_Bucket是指针散列(>0)。当密钥类型不是void*,而是uintpttr\t时,也会发生同样的情况。这是VS错误还是我做错了什么


注意:这个问题与-这是同一个问题,但答案不相关

这是一个相当老的问题,我不知道我的答案是否适合这个问题。但是,由于我们没有从OP中获得更多信息,并且我遇到了相同的运行时错误,因此我将发布针对我的特定问题的解决方案。也许有人觉得它也很有用

在我的例子中,这是一个静态初始化顺序问题。在初始化该类的静态成员之前,我访问了
无序_映射
(它是一个静态类成员)

这导致了未定义的行为(访问未初始化的对象),导致应用程序因运行时错误而崩溃


可以找到如何解决静态初始化顺序问题。

那么,实际尝试向该映射添加内容的代码在哪里?
void*ScalableMemoryManager::allocateAligned(size\t size,size\t alignment){void*pointer=scalable\u aligned\u malloc(size,alignment);if(pointer==nullptr)抛出bad_alloc();mtotalaallocated+=size;mSizes.insert(SizeMap::value_type(pointer,size));++mtotalaallocations;return pointer;}
可能是全局,还是静态类成员?请为自己的变量、函数和类创建一个.并请不要使用以
\uu
开头的名称。这些是保留的。
_Unchecked_iterator& _Vec_lo(size_type _Bucket)
{   // return reference to begin() for _Bucket
return (_Vec[2 * _Bucket]);
}