繁体   English   中英

在std :: map.find上的Sigbus

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM