Hi,

I have the following map :

    listOfPolicyRuleInfo CPCRF::m_mlistOfCliConfiguredPolicyRules;

where typedef map<string, PolicyRuleInfo> listOfPolicyRuleInfo;

where PolicyRuleInfo is a struct 

struct PolicyRuleInfo{
    BearerQoSInfo stBearerQoS;
    TFTInfo stTFTInfo;
    PolicyRuleInfo(){};
    PolicyRuleInfo( BearerQoSInfo const& qos, TFTInfo const& tft)
       : stBearerQoS(qos), stTFTInfo(tft)
    { }
};

listOfPolicyRuleInfo m_mlistOfCliConfiguredPolicyRules = 
boost::assign::map_list_of("PolicyRule_Fred", PolicyRuleInfo( BearerQoSInfo(9), TFTInfo()))
                           ("PolicyRule_Voice_C", PolicyRuleInfo( BearerQoSInfo(5), TFTInfo()))
                            ("PolicyRule_Voice_U", PolicyRuleInfo( BearerQoSInfo(1), TFTInfo()));

Above are the data strutures. Now within the code somewhere ,

    listOfPolicyRuleInfo::iterator it = m_mlistOfCliConfiguredPolicyRules.find("PolicyRule_Fred");

I get error when i try to print the contents of it.

on gdb i see the list

(gdb)p m_mlistOfCliConfiguredPolicyRules

  ["PolicyRule_Fred"] = {stBearerQoS = {nQCI = 9, nMaxUlBitRate = 0, nMaxDlBitRate = 0,
      nGuarUlBitRate = 0, nGuarDlBitRate = 0, nPriorityLevel = 15,
      bPreEmptionCapabilityEnabled = false, bPreEmptionVulnerabilityEnabled = true,
      bQoSModified = false}, stTFTInfo = {static IPV4CompLen = 9 '\t',
      static PiNhCompLen = 2 '\002', static SinglePortCompLen = 3 '\003',
      static PortRangeCompLen = 5 '\005', static TypeOfServiceCompLen = 3 '\003',
      static FilterHdrLen = 3 '\003', nTFTLen = 0, eOpCode = 3653872, bEBit = false,
      nNumPktFilters = 0 '\000', mFilterId2TFTFilters = std::map with 0 elements,
      vTFTParams = std::vector of length 0, capacity 0}},
  ["PolicyRule_Voice_C"] = {stBearerQoS = {nQCI = 5, nMaxUlBitRate = 0, nMaxDlBitRate = 0,
      nGuarUlBitRate = 0, nGuarDlBitRate = 0, nPriorityLevel = 15,
      bPreEmptionCapabilityEnabled = false, bPreEmptionVulnerabilityEnabled = true,
      bQoSModified = false}, stTFTInfo = {static IPV4CompLen = 9 '\t',
      static PiNhCompLen = 2 '\002', static SinglePortCompLen = 3 '\003',
      static PortRangeCompLen = 5 '\005', static TypeOfServiceCompLen = 3 '\003',
      static FilterHdrLen = 3 '\003', nTFTLen = 0, eOpCode = 3943806, bEBit = false,
      nNumPktFilters = 0 '\000', mFilterId2TFTFilters = std::map with 0 elements,
      vTFTParams = std::vector of length 0, capacity 0}},
  ["PolicyRule_Voice_U"] = {stBearerQoS = {nQCI = 1, nMaxUlBitRate = 0, nMaxDlBitRate = 0,
      nGuarUlBitRate = 0, nGuarDlBitRate = 0, nPriorityLevel = 15,
      bPreEmptionCapabilityEnabled = false, bPreEmptionVulnerabilityEnabled = true,
      bQoSModified = false}, stTFTInfo = {static IPV4CompLen = 9 '\t',
      static PiNhCompLen = 2 '\002', static SinglePortCompLen = 3 '\003',
      static PortRangeCompLen = 5 '\005', static TypeOfServiceCompLen = 3 '\003',
      static FilterHdrLen = 3 '\003', nTFTLen = 0, eOpCode = 4870778, bEBit = false,
      nNumPktFilters = 0 '\000', mFilterId2TFTFilters = std::map with 0 elements,
      vTFTParams = std::vector of length 0, capacity 0}}

But
(gdb) p it
$6 = {first = Traceback (most recent call last):
  File "/usr/lib/../share/gdb/python/libstdcxx/v6/printers.py", line 558, in to_string
    return self.val['_M_dataplus']['_M_p'].lazy_string (length = len)
RuntimeError: Cannot access memory at address 0xfffffff4
, second = {stBearerQoS = {nQCI = 0, nMaxUlBitRate = 0, nMaxDlBitRate = 0,
      nGuarUlBitRate = 172411760, nGuarDlBitRate = 172411760, nPriorityLevel = 0,
      bPreEmptionCapabilityEnabled = false, bPreEmptionVulnerabilityEnabled = false,
      bQoSModified = false}, stTFTInfo = {static IPV4CompLen = 9 '\t',
      static PiNhCompLen = 2 '\002', static SinglePortCompLen = 3 '\003',
      static PortRangeCompLen = 5 '\005', static TypeOfServiceCompLen = 3 '\003',
      static FilterHdrLen = 3 '\003', nTFTLen = 0, eOpCode = 174849016, bEBit = 128,
      nNumPktFilters = 251 '\373', mFilterId2TFTFilters = std::map with 0 elements,
      vTFTParams = std::vector of length 0, capacity 0}}}

Could some c++ stl experts help me with this issue please ?

thanks,
~pdk

Any input or help is greatly appreciated.

I was mostly working on legacy c++..now trying to implement my own small part of module. Getting difficult to integrate. time is critical, so help will be appreciated from experts.

What's the error you get?

At first glance, it looks like you may be trying to print the iterator, it, which isn't the same as the object it points to. If that's the case, try printing *it instead.

Also, bear in mind that the iterator (*it) will be pointing to a std::pair<string, PolicyRuleInfo> object within the map. If you only want the PolicyRuleInfo struct, you'll want to use it->second.

This article has been dead for over six months. Start a new discussion instead.