(Ошибка сегментации) Ошибка при доступе к значению, связанному с ключом на неупорядоченной карте. Любые указатели, где я делаю ошибку?Ошибка Seg в unordered_map <int, std :: vector <double>>
вина Сегментация в следующем фрагменте кода:
void read_mdl(const std::string& fname) {
std::ifstream f(fname);
std::unordered_map<int, std::vector<double>> pt_;
while(f) {
int xi = -1;
int pa = 0;
double score = -1;
f >> xi >> pa >> score;
if(xi == -1) { break; }
std::unordered_map<int, std::vector<double>>::iterator it = pt_.find(pa);
std::cout << xi << " " << pa << " " << score << std::endl;
if (it != pt_.end()) {
// Update from @Matthias247
auto a = pt_.insert(std::make_pair(pa, std::vector<double>(n_, 0)));
it = a.first;
}
(it->second)[xi] = score; // causing segmentation fault
}
}
Подумайте о том, что произойдет, когда '' == Оно деталь A. 'pt_.end()'. – songyuanyao
Недостаток вашего способа проверки отсутствия данных из потока. См. [этот старый мой ответ] (http://stackoverflow.com/a/13379073/440558), почему. Также читайте [«Почему iostream :: eof внутри условия цикла считается неправильным?»] (Http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong) , Использовать, например. 'while (f >> xi >> pa >> score)' вместо этого. –
Также рассмотрите, что произойдет, если 'xi> = n_'. –