Sigbus on std :: map.find - PullRequest
       5

Sigbus on std :: map.find

0 голосов
/ 01 февраля 2011

У меня есть карта, определенная внутри класса в заголовочном файле, например:

std::map<int, char> mCompletedIds;

Я могу сделать с вектором здесь, так как мне просто нужно сохранить идентификаторы, которые были завершены. Но чтобы быстро найти, я использую карту. Поэтому я всегда ставлю второй аргумент пары как 0.

Теперь, в одном из фн. класса, я делаю найти.

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

В этом заявлении я получаю SIGBUS. Это потому, что на данный момент карта пуста? Может кто-нибудь пожалуйста. помогите мне понять причину.

Спасибо, SG

Ответы [ 2 ]

3 голосов
/ 01 февраля 2011

Если вам нужен магазин цифр, вы можете использовать std::set<int>

Чтобы узнать, присутствует ли значение, используйте

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

Ваша ошибка SIGBUS обычно будет вызвана неправильным выравниванием или другим повреждением, которое произошло в вашем коде, и такой инструмент, как valgrind , может указать вам, где ваша настоящая ошибка.

1 голос
/ 01 февраля 2011

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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...