首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过引用传递给函数"map container“时出现分段错误

通过引用传递给函数"map container“时出现分段错误
EN

Stack Overflow用户
提问于 2010-11-29 06:26:39
回答 1查看 442关注 0票数 0

大家好,

我有一张地图

代码语言:javascript
复制
typedef  boost::unordered_map <flow_t, individual_flow_table, fhash, fequal_to>   flow_redundancy_map_t; 

flow_t是一个由5个无符号整数组成的结构,fhash和fequal_to是使用boost库中规定的标准方式完成的。

代码语言:javascript
复制
   struct individual_flow_table{

redundancy_t flow_redundancy; 
     //flow_redundancy is again a map -please see typedef below

unsigned long long redundant_bytes;

unsigned long long num_accesses;

unsigned long long flow_size;

 };

typedef map <unsigned long long , pkt_data> redundancy_t; 
  //pkt_data is a structure of 3 unsigned long long

 flow_redundancy_map_t sorted_flows;

我通过初始化长整型,然后清除"individual_flow_tables“映射将"flow_redundancy”插入到sorted_flows中。

稍后,我使用"flow_t“作为键访问映射"sorted_flows”,并获得"flow_redundancy“映射作为值(代码如下)

代码语言:javascript
复制
          local_flow_redundancy = it->second.redundant_bytes;

      local_num_accesses = it->second.num_accesses;

       winnow(it->second.flow_redundancy);

       it->second.redundant_bytes = local_flow_redundancy ;

       it->second.num_accesses = local_num_accesses ;

           /* More code */

          void winnow(redundancy_t & red_table)

          {         unsigned long long some_key; 
                    pkt_data  some_value;
                  //more code for computation of some_key 

                  redundancy_t::iterator it = red_table.find(some_key);

                  if(it!=red_table.end())

                  /*Some updating of the red_table*/
                  else

                     red_table.insert(make_pair(some_key, some_value));

            }                  

我在插入"red_table“时遇到了分段错误。我用valgrind运行,它在代码的插入行给出了“条件跳转或移动依赖于未初始化的值”。

或者,我没有在函数"winnow“中通过引用传递"red_table”,而是再次索引(使用相同的flow_t)到"sorted_flow“映射中,并将"red_table”放在适当的位置。它工作得很好。

我想它一定是通过引用传递的。我对C++有点陌生,虽然精通C语言,但任何指针都会很有帮助。如果需要,我也可以提供更多的澄清。

谢谢你,Govind

EN

回答 1

Stack Overflow用户

发布于 2010-11-29 06:59:58

我不认为这里有足够的信息能够直接给你提供建议。(如果代码示例的格式更好,会有所帮助,但这只是问题的一部分。)

但是,您可以尝试将失败的代码分解为单独的行,以便更好地了解导致失败的原因。例如:

代码语言:javascript
复制
    pair<unsigned long long, pkt_data> tmpValue = make_pair(some_key, some_value);
    red_table.insert(tmpValue);

(:请注意,red_table (显然)是unsigned long long --> pkt_data的映射。那么,当some_value是一个unsigned long long时,插入make_pair(some_key, some_value)的结果有什么意义呢?)

您还可以尝试初始化some_keysome_value,看看这是否会消除valgrind错误:

代码语言:javascript
复制
unsigned long long some_key = 0, some_value = 0;

如果是这样,请尝试一次初始化一个:

代码语言:javascript
复制
unsigned long long some_key = 0, some_value;

代码语言:javascript
复制
unsigned long long some_key, some_value = 0;

以查看其中哪一个正在生成未初始化值警告。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4299488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档