2013-04-11 23 views
6

私はstd::unordered_map<void *, size_t>をいくつかの値を保持するために使用しています。新しい値を追加するときにベクトルの添え字が範囲外になります。私は、Visual Studio 2012を使用しているとエラートレースは、次のとおりです。std :: unordered_mapベクトルの添え字が範囲外にある

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++ 

specificaly:_Vecは空のベクターであると_Bucketがポインタハッシュある

_Unchecked_iterator& _Vec_lo(size_type _Bucket) 
{ // return reference to begin() for _Bucket 
return (_Vec[2 * _Bucket]); 
} 

(> 0)。キータイプがvoid *でなくuintptr_tである場合も同じことが起こります。 VSバグですか、何か間違っていますか?

注:この質問はc++ unorderedmap vector subscript out of rangeに関連している - これは同じ問題ですが、答えは

+1

実際にこのマップに何かを追加しようとしているコードはどこですか? – Chad

+0

'void * ScalableMemoryManager :: allocateAligned(size_t size、size_t alignment) { void * pointer = scalable_aligned_malloc(size、alignment); if(pointer == nullptr) throw bad_alloc(); mTotalAllocated + = size;mSizes.insert(SizeMap :: value_type(pointer、size)); ++ mTotalAllocations; 戻りポインタ。 } ' – krojew

+0

' mSizes'は万一グローバルな、あるいは静的なクラスメンバですか? –

答えて

1

に関連していないそれはかなり古い質問だと私の答えは質問に合った場合、私は知りません。しかし、我々はOPから追加情報を取得しなかったので、私は同じランタイムエラーに走った、私は私の特定の問題に私の解決策を投稿しています。たぶん誰かがそれを役に立つと思うかもしれない。

私の場合は静的初期化問題でした。そのクラスの静的メンバーが初期化される前に、私はunordered_map(静的なクラスメンバーだった)にアクセスしました。

そのランタイムエラーでアプリケーションをクラッシュさせた、未定義の動作(初期化されていないオブジェクトへのアクセス)が発生しました。

静的初期化順序の問題を解決する方法は、hereで見つけることができます。

関連する問題