我正在测试std::unordered_map
以便在项目中实际使用它们之前习惯它们。
我注意到,如果我使用指针作为键,当用作键的指针实际指向某个值时,会出现段错误。这是我的代码:
#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]);
}
现在,如果我取消注释该注释行,我会得到一个分段错误错误,而如果我将它留下来,那么一切都很完美。为什么会这样?
答案 0 :(得分:1)
您声明了一个指针,而不是int
。指针指向无处,因为你没有初始化它。没有地方可以写18
,因为指针不指向任何空格。
请注意,您的问题与无序地图完全无关
int * key; *key = 18;
将在任何情况下转储。
使用任何一个
int key; key = 18;
,
或者如果你真的希望key
成为指针:
int * key = new int; key = 18;