Reputation: 35
I get a segmentation fault when doing anything with my map. Its declared like this:
typedef std::map<uint16_t, std::vector<std::pair<std::string, uint16_t> > > bitMap_t;
And then I have a private class member using this map
private:
bitMap_t m_bitMap;
My code using this map looks like this
uint16_t i = 1;
uint16_t j = 0;
uint16_t reg = 0;
uint16_t regIndex = 0;
uint8_t regSizeWords = 0;
for (regIndex = 0; regIndex < NUMBER_OF_BIT_REGS; regIndex++) {
for (i = 1, reg = m_regList[regIndex].address; reg < (m_regList[regIndex].address + REGS_SIZE); reg++, i++) {
for (j = 0; j < m_regList[regIndex].signalsAndBitMasks.size(); j++) {
ostringstream signalName;
signalName << m_regList[regIndex].signalsAndBitMasks[j].first << "." << i;
m_bitMap[reg].push_back(make_pair(signalName.str(), m_regList[regIndex].signalsAndBitMasks[j].second));
}
}
}
I have also tested just doing a m_bitMap.clear() before all this code and that didn't work either. So I guess it has something to do with nested map, vector and pair or? The segfault error looks like this:
std::less<unsigned short>::operator() at stl_function.h:230 0x805e8da
std::_Rb_tree<unsigned short, std::pair<unsigned short const, std::vector<std::pair<std::string, unsigned short>, std::allocator<std::pair<std::string, unsigned short> > > >, std::_Select1st<std::pair<unsigned short const, std::vector<std::pair<std::string, unsigned short>, std::allocator<std::pair<std::string, unsigned short> > > > >, std::less<unsigned short>, std::allocator<std::pair<unsigned short const, std::vector<std::pair<std::string, unsigned short>, std::allocator<std::pair<std::string, unsigned short> > > > > >::_M_lower_bound() at stl_tree.h:986 0x8063a0f
std::_Rb_tree<unsigned short, std::pair<unsigned short const, std::vector<std::pair<std::string, unsigned short>, std::allocator<std::pair<std::string, unsigned short> > > >, std::_Select1st<std::pair<unsigned short const, std::vector<std::pair<std::string, unsigned short>, std::allocator<std::pair<std::string, unsigned short> > > > >, std::less<unsigned short>, std::allocator<std::pair<unsigned short const, std::vector<std::pair<std::string, unsigned short>, std::allocator<std::pair<std::string, unsigned short> > > > > >::lower_bound() at stl_tree.h:745 0x8063531
std::map<unsigned short, std::vector<std::pair<std::string, unsigned short>, std::allocator<std::pair<std::string, unsigned short> > >, std::less<unsigned short>, std::allocator<std::pair<unsigned short const, std::vector<std::pair<std::string, unsigned short>, std::allocator<std::pair<std::string, unsigned short> > > > > >::lower_bound() at stl_map.h:701 0x806311a
std::map<unsigned short, std::vector<std::pair<std::string, unsigned short>, std::allocator<std::pair<std::string, unsigned short> > >, std::less<unsigned short>, std::allocator<std::pair<unsigned short const, std::vector<std::pair<std::string, unsigned short>, std::allocator<std::pair<std::string, unsigned short> > > > > >::operator[]() at stl_map.h:447 0x8062bc1
srvmgr::MbBitMap::InitBitMap() at mbbitmap.cpp:175 0x80620cc
Upvotes: 0
Views: 3742
Reputation: 179907
By far the most common reason is not actually having a map in the first place.
You write that the map is private: bitMap_t m_bitMap;
, i.e. a member of an object. I'll bet that you have a pointer to this object (MbBitMap
?), but for some reason unrelated to std::map
this pointer is invalid.
Upvotes: 1