2013-04-11 21 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:

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

जहां _Vec एक खाली वेक्टर है और _Bucket सूचक हैश है (> 0)। वही बात तब होती है जब कुंजी प्रकार शून्य नहीं होता है, लेकिन uintptr_t। क्या यह एक वीएस बग है या क्या मैं कुछ गलत कर रहा हूं?

नोट: इस सवाल का c++ unorderedmap vector subscript out of range से संबंधित है - यह एक ही समस्या है, लेकिन इस सवाल का जवाब संबंधित नहीं है

+1

तो, यह कोड वास्तव में इस मानचित्र में कुछ जोड़ने का प्रयास कहां है? – Chad

+0

'शून्य * स्केलेबल मेमरी प्रबंधक :: आवंटित हस्ताक्षर (आकार_टी आकार, आकार_टी संरेखण) { शून्य * सूचक = scalable_aligned_malloc (आकार, संरेखण); अगर (सूचक == nullptr) bad_alloc() फेंक दें; mTotalAllocated + = आकार; mSizes.insert (SizeMap :: value_type (सूचक, आकार)); ++ mTotalAllocations; वापसी सूचक; } ' – krojew

+0

किसी भी मौके पर वैश्विक, या स्थैतिक वर्ग सदस्य 'msizes' है? –

उत्तर

1

यह एक सुंदर पुराने सवाल है और अगर मेरा उत्तर सूट सवाल मैं नहीं जानता। लेकिन चूंकि हमें ओपी से अतिरिक्त जानकारी नहीं मिली और मैं उसी रनटाइम त्रुटि में भाग गया, इसलिए मैं अपनी विशिष्ट समस्या के लिए अपना समाधान पोस्ट कर रहा हूं। शायद किसी को भी यह उपयोगी लगता है।

मेरे मामले में यह एक स्थिर प्रारंभिक आदेश समस्या थी। उस कक्षा के स्थिर सदस्यों को शुरू करने से पहले मैंने unordered_map (जो एक स्थिर वर्ग सदस्य था) तक पहुंचा था।

जिसके परिणामस्वरूप अपरिभाषित व्यवहार (ऑब्जेक्ट्स को एक्सेस करना प्रारंभ नहीं किया गया) जिसने उस रनटाइम त्रुटि के साथ एप्लिकेशन को क्रैश किया।

स्थिर प्रारंभिक आदेश समस्याओं को हल करने के लिए कैसे here पाया जा सकता है।

संबंधित मुद्दे