तक पहुँचने मैं ब्लॉक एक सरल struct के रूप में परिभाषित किया जा रहा है के साथ एक unordered_map<Block, int>
इस प्रकार है:SIGFPE जब unordered_map
struct Block {
size_t start;
size_t end;
bool operator==(const Block& b) const {
return start == b.start && end == b.end;
}
};
namespace std {
template<>
struct hash<Block> {
size_t operator()(const Block& b) const {
return b.start;
}
};
}
जब नक्शे का उपयोग करने की कोशिश कर रहा है, मैं gdb में निम्न त्रुटि संदेश (दोनों जी ++ 4.7 के लिए एक ही मिलता है .1 रूप में अच्छी तरह बजना ++ 3.1) के रूप में:
Program received signal SIGFPE, Arithmetic exception.
0x0000000000401e0b in std::__detail::_Mod_range_hashing::operator() (this=0x7fffffffd8e0, __num=0, __den=0)
at /usr/include/c++/4.7/bits/hashtable_policy.h:245
245 { return __num % __den; }
मेरे libstdC++ संस्करण है 3.4.17 (यानी जीसीसी 4.7 से संस्करण)
प्रासंगिक पश्व-अनुरेखन:
#0 0x0000000000401e0b in std::__detail::_Mod_range_hashing::operator() (this=0x7fffffffd8e0, __num=0, __den=0)
at /usr/include/c++/4.7/bits/hashtable_policy.h:245
#1 0x0000000000407199 in std::__detail::_Hash_code_base<Block, std::pair<Block const, int>, std::_Select1st<std::pair<Block const, int> >, std::hash<Block>, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, true>::_M_bucket_index (this=0x7fffffffd8e0, __c=0, __n=0) at /usr/include/c++/4.7/bits/hashtable_policy.h:787
#2 0x0000000000405230 in std::_Hashtable<Block, std::pair<Block const, int>, std::allocator<std::pair<Block const, int> >, std::_Select1st<std::pair<Block const, int> >, std::equal_to<Block>, std::hash<Block>, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, true, false, true>::_M_bucket_index
(this=0x7fffffffd8e0, __k=..., __c=0) at /usr/include/c++/4.7/bits/hashtable.h:466
#3 0x00000000004038de in std::__detail::_Map_base<Block, std::pair<Block const, int>, std::_Select1st<std::pair<Block const, int> >, true, std::_Hashtable<Block, std::pair<Block const, int>, std::allocator<std::pair<Block const, int> >, std::_Select1st<std::pair<Block const, int> >, std::equal_to<Block>, std::hash<Block>, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, true, false, true> >::at (
this=0x7fffffffd8e0, __k=...) at /usr/include/c++/4.7/bits/hashtable_policy.h:474
#4 0x0000000000403001 in SplicedAlignment::FindOptimalEndBlock() const::{lambda(Block const&)#1}::operator()(Block const&) const (__closure=0x7fffffffd990, block=...) at splicing.cpp:151
#5 0x00000000004040b3 in std::for_each<__gnu_cxx::__normal_iterator<Block const*, std::vector<Block, std::allocator<Block> > >, SplicedAlignment::FindOptimalEndBlock() const::{lambda(Block const&)#1}>(__gnu_cxx::__normal_iterator<Block const*, std::vector<Block, std::allocator<Block> > >, SplicedAlignment::FindOptimalEndBlock() const::{lambda(Block const&)#1}, SplicedAlignment::FindOptimalEndBlock() const::{lambda(Block const&)#1}) (__first=..., __last=..., __f=...)
at /usr/include/c++/4.7/bits/stl_algo.h:4442
संपादित करें: मुझे नहीं लगता था कि यह वास्तव में एक फर्क जहां मैं समारोह के रूप में लंबे समय से मैं यह एक ही तर्क देना के रूप में फोन होगा, लेकिन जाहिरा तौर पर यह होता है:
std::for_each(blocks.begin(), blocks.end(), [&](const Block& block) {
map.at(block);
}
सुराग त्रुटि के लिए, बस करते हुए:
const Block& block = blocks[0];
map.at(block);
काम करता है बिल्कुल ठीक (blocks
जा रहा है एक सरल vector<Block>&
)
आपकी समस्या से संबंधित नहीं है, लेकिन आपको कभी भी कार्य/कक्षाएं/आदि नहीं रखना चाहिए। 'std' नेमस्पेस में। –
यहां संभावित डुप्लिकेट http://stackoverflow.com/questions/8286103/strange-unordered-map- स्थिति –
@ सर्गी मैंने देखा कि एक, लेकिन समाधान में मेरी समस्या के साथ कुछ भी नहीं लगता है - पूरे कोड वास्तव में एक ही हेडर फ़ाइल में है (और हाँ मुझसे बेवकूफ यह ध्यान में नहीं है कि मूल प्रश्न में, mea culpa)। – Voo