当指针用作 std::unordered_map 中的关键点时出现分段错误
Segmentation fault when pointer used as key points to something in std::unordered_map
在项目中实际使用它们之前,我正在测试 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]);
}
现在,如果我取消注释该注释行,则会出现分段错误,而如果我保留注释,则一切正常。为什么会这样?
您声明了一个指针,而不是 int
。指针指向任何地方,因为您没有初始化它。没有地方可以写入 18
,因为指针没有指向任何 space.
请注意,您的问题与无序地图完全无关。
int * key; *key = 18;
将在任何上下文中转储。
使用其中之一
int key; key = 18;
,
或者如果你真的想让 key
成为一个指针:
int * key = new int; key = 18;
在项目中实际使用它们之前,我正在测试 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]);
}
现在,如果我取消注释该注释行,则会出现分段错误,而如果我保留注释,则一切正常。为什么会这样?
您声明了一个指针,而不是 int
。指针指向任何地方,因为您没有初始化它。没有地方可以写入 18
,因为指针没有指向任何 space.
请注意,您的问题与无序地图完全无关。
int * key; *key = 18;
将在任何上下文中转储。
使用其中之一
int key; key = 18;
,
或者如果你真的想让 key
成为一个指针:
int * key = new int; key = 18;