(分段错误)访问与无序映射中的键关联的值时发生错误。我犯错误的任何指针?
以下代码片段中的分段错误:
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
}
}
答案 0 :(得分:0)
在没有找到元素的情况下,你的迭代器会被破坏。在这种情况下,您使用foreach (var id in factoryIds)
{
var collection = session.Advanced.LoadStartingWith<CarPart>(prefix + id + "/parts");
result.AddRange(collection);
}
插入一个新元素,但不要更改迭代器。之后访问它会导致段错误。如果pt_.insert
返回迭代器并将其分配给insert
,则执行新的查找或查找。
<强>更新强>
如果我正确理解it
API,它应该像
insert
答案 1 :(得分:0)
发现错误。
检查密钥是否存在是错误的。
关于我的代码段:
if (it != pt_.end()) // incorrect way
if (it == pt_.end()) // right way