[英]Sigbus on std::map.find
我在头文件的类中定义了一个映射,如下所示:
std::map<int, char> mCompletedIds;
我可以在这里使用矢量,因为我只需要存储已完成的ID。 但是要快速查找,我正在使用地图。 因此,我总是将对的第二个参数设为0。
现在,在fns之一中。 上课,我在找。
std::map<int, char>::iterator it = mCompletedIds.find(id); //id is defined above
在此声明中,我正在获取SIGBUS。 是因为地图目前是空的吗? 任何人都可以。 帮助我了解原因。
谢谢,SG
如果只想存储数字,则可以使用std::set<int>
要查看是否存在值,请使用
std::set<int> mCompletedIds;
bool found = mCompletedIds.count(id) != 0;
您的SIGBUS错误通常是由代码中对齐错误或其他损坏引起的,而类似valgrind的工具可能会向您指示真正的错误在哪里。
std::set
是您需要的: cppRef
int id = 0;
std::set<int> idList;
std::set<int>::iterator it = idList.find(id); //see also count function
if (it != idList.end()) { // find will return set::end if the element is not found
// id is in your list
} else {
// id isn't in your list
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.