Sigbus在std :: map.find上

时间:2011-02-01 10:15:09

标签: c++ stl

我在头文件中的类中定义了一个映射,如下所示:

std::map<int, char> mCompletedIds;

我可以在这里使用向量,因为我只需要存储已经完成的id。但要快速找到,我正在使用地图。所以,我总是把对的第二个参数作为0。

现在,在其中一个fns中。上课,我正在寻找。

std::map<int, char>::iterator it = mCompletedIds.find(id); //id is defined above

在这个声明中,我收到了SIGBUS。是因为目前地图是空的吗?任何人都可以。帮助我理解原因。

谢谢, SG

2 个答案:

答案 0 :(得分:3)

如果您只想要一个数字存储,可以使用std::set<int>

要查看是否存在值,请使用

std::set<int> mCompletedIds;
bool found = mCompletedIds.count(id) != 0; 

您的SIGBUS错误通常是由错误的对齐或代码中发生的其他一些损坏引起的,而valgrind之类的工具可能会向您显示您的真实错误。

答案 1 :(得分:1)

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
}