繁体   English   中英

使用地图时出现分割错误

[英]Segmentation fault when using map

对地图执行任何操作时都会遇到分割错误。 其声明如下:

typedef std::map<uint16_t, std::vector<std::pair<std::string, uint16_t> > > bitMap_t;

然后我有一个私人班级成员在使用这张地图

        private:
        bitMap_t m_bitMap;

我使用此地图的代码如下所示

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));
        }
    }
}

我还测试了在执行所有此代码之前仅执行m_bitMap.clear()的方法,该方法也不起作用。 所以我想这与嵌套地图,向量和配对有关? segfault错误如下所示:

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

到目前为止,最常见的原因实际上并不是实际上没有地图。

您写道该地图是private: bitMap_t m_bitMap; ,即对象的成员。 我敢打赌,您有一个指向该对象的指针( MbBitMap ?),但是由于某种原因,该指针与std::map无关。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM