Sto utilizzando std::unordered_map<void *, size_t>
per contenere alcuni valori e sto ottenendo "indice vettoriale fuori intervallo" quando si aggiunge un nuovo valore. Sto usando Visual Studio 2012 e la traccia di errore è:std :: unordered_map vettore pedice nell'intervallo
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++
specificatamente:
_Unchecked_iterator& _Vec_lo(size_type _Bucket)
{ // return reference to begin() for _Bucket
return (_Vec[2 * _Bucket]);
}
dove _Vec è un vettore vuoto e _Bucket è l'hash puntatore (> 0). La stessa cosa accade quando il tipo di chiave non è nullo *, ma uintptr_t. È un bug VS o sto facendo qualcosa di sbagliato?
Nota: questa domanda è legata alla c++ unorderedmap vector subscript out of range - questo è lo stesso problema, ma la risposta non è legato
Quindi, dov'è il codice che tenta effettivamente di aggiungere qualcosa a questa mappa? – Chad
'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; puntatore di ritorno; } ' – krojew
È' mSizes' per caso un membro di classe globale o statico? –