Tôi đang sử dụng std::unordered_map<void *, size_t>
để giữ một số giá trị và tôi nhận được "chỉ số vectơ nằm ngoài phạm vi" khi thêm giá trị mới. Tôi đang sử dụng Visual Studio 2012 và các dấu vết lỗi là:std :: unordered_map vector subscript trong phạm vi
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:
_Unchecked_iterator& _Vec_lo(size_type _Bucket)
{ // return reference to begin() for _Bucket
return (_Vec[2 * _Bucket]);
}
nơi _Vec là một vector rỗng và _Bucket là băm con trỏ (> 0). Điều tương tự cũng xảy ra khi loại khóa không có hiệu lực *, nhưng uintptr_t. Có phải đó là lỗi VS hay tôi đang làm điều gì sai?
Lưu ý: Câu hỏi này có liên quan đến c++ unorderedmap vector subscript out of range - đây là vấn đề tương tự, nhưng câu trả lời là không liên quan
Vì vậy, mã ở đâu thực sự cố gắng thêm nội dung nào đó vào bản đồ này? – Chad
'void * ScalableMemoryManager :: allocateAligned (size_t size, size_t alignment) { void * pointer = scalable_aligned_malloc (kích thước, căn chỉnh); nếu (con trỏ == nullptr) ném bad_alloc(); mTotalAllocated + = size; mSizes.insert (SizeMap :: value_type (con trỏ, kích thước)); ++ mTotalAllocations; con trỏ trả về; } ' – krojew
Có phải' mSizes' có khả năng là thành viên toàn cầu hoặc lớp tĩnh không? –