Приветствую всех,вина Сегментация при переходе к функции «карта контейнеров» со ссылкой
У меня есть карта карт
typedef boost::unordered_map <flow_t, individual_flow_table, fhash, fequal_to> flow_redundancy_map_t;
flow_t представляет собой структуру из 5 целых чисел без знака, fhash и fequal_to сделаны используя std-путь, как предписано в библиотеке 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;
вставить в sorted_flows «individual_flow_tables» инициализацией лонги, а затем очищая «flow_redundancy» карту.
Позже я получить доступ к карте «sorted_flows» с помощью «flow_t» в качестве ключа, и я получаю «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, он дает мне «Условный переход или перемещение зависит от неинициализированных значений» на строке вставки кода.
В качестве альтернативы вместо передачи по ссылке «red_table» в функции «winnow» я снова проиндексировал (используя тот же flow_t) на карту «sorted_flow» и получил «red_table» на месте. Он работал нормально.
Я полагаю, что он должен что-то сделать с передачей по ссылке. Я немного зелёный на C++, хотя разумно владею C. Любые указатели будут очень полезны. Я также могу предоставить дополнительные разъяснения, если это необходимо.
Спасибо Говинд
Не могли бы вы предоставить фрагменты кода, показывающие, где `it` получает это значение, и каков был альтернативный код?Также возможно более подробная информация от Valgrind? – 2010-11-28 22:49:51
У вас есть еще один код для вычисления значения `some_value`? И инициализируется ли `it`? – vpit3833 2010-11-28 23:01:50