当指针用作 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;