大家好,
我有一张地图
typedef boost::unordered_map <flow_t, individual_flow_table, fhash, fequal_to> flow_redundancy_map_t; flow_t是一个由5个无符号整数组成的结构,fhash和fequal_to是使用boost库中规定的标准方式完成的。
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“映射作为值(代码如下)
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
发布于 2010-11-29 06:59:58
我不认为这里有足够的信息能够直接给你提供建议。(如果代码示例的格式更好,会有所帮助,但这只是问题的一部分。)
但是,您可以尝试将失败的代码分解为单独的行,以便更好地了解导致失败的原因。例如:
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_key和some_value,看看这是否会消除valgrind错误:
unsigned long long some_key = 0, some_value = 0;如果是这样,请尝试一次初始化一个:
unsigned long long some_key = 0, some_value;和
unsigned long long some_key, some_value = 0;以查看其中哪一个正在生成未初始化值警告。
https://stackoverflow.com/questions/4299488
复制相似问题