c++ - std::map.find 上的 Sigbus

标签 c++ stl

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

std::map<int, char> mCompletedIds;

我可以在这里使用 vector ,因为我只需要存储已完成的 ID。但是为了快速找到,我正在使用 map 。所以,我总是将 pair 的第二个参数设置为 0。

现在,在其中一个 fns 中。类,我正在查找。

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

在这个声明中,我得到了 SIGBUS。是因为 map 现在是空的吗?谁能请。帮助我了解原因。

谢谢, 上海

最佳答案

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

查看一个值是否存在使用

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

您的 SIGBUS 错误通常是由对齐错误或代码中发生的其他一些损坏以及 valgrind 等工具引起的可能会告诉你真正的错误在哪里。

关于c++ - std::map.find 上的 Sigbus,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4861302/

相关文章:

c++ - C++ #include 查找是否有任何标准要求?

c++ - sizeof(T) == sizeof(int) 吗?

c++ - 如何在视频序列中识别一次图像?

c++ - 为什么地址运算符 ('&' ) 可以与在 C++ 中使用寄存器存储类说明符声明的对象一起使用?

C++模板问题

c++ - 为什么使用 `std::reverse_iterator` 不调用 UB?

c++ - 使用 STL 算法合并 2 个 vector

c++ - 是否有用于 C(C99 或其他)的标准化和常用库,因为 STL 用于 C++?

c++ - 通过在另一组上调用 erase(iterator) 从一组中删除元素。这是正常行为吗?

c++ - 禁止将右值引用传递给函数