Я тестировал std::unordered_map
s, чтобы привыкнуть к ним, прежде чем использовать их в проекте.Ошибка сегментации, когда указатель используется как ключевой момент для чего-то в std :: unordered_map
И я заметил, что если я использую указатели в качестве ключей, я получаю ошибку segfault, когда указатель, используемый в качестве ключа, фактически указывает на значение. Это мой код:
#include <unordered_map>
#include <stdio.h>
int main() {
std::unordered_map<int*, int> map;
int* key;
//*key = 18;
map[key] = 1893;
printf("%d\n", map[key]);
}
Теперь, если я раскомментировать эту комментируемую строку, я получаю ошибку ошибки сегментации, в то время как, если я оставлю это commmented, все работает отлично. Почему это происходит?
вы забыли выделить память для указателя. 'int * key = new int' – PRP
Отмеченные строки разделяют неинициализированный указатель, как вы ожидаете, что это сработает? –
Посмотрите на это [руководство по указателям] (http://www.cplusplus.com/doc/tutorial/pointers/). Это объясняет все, что вам нужно знать, почему это не сработает. – muXXmit2X