当指针用作指向std::unordered_map中的某个内容的关键点时,出现分段错误

Segmentation fault when pointer used as key points to something in std::unordered_map

本文关键字:关键点 分段 错误 指针 std map unordered      更新时间:2023-10-16

在实际项目中使用它们之前,我正在测试std::unordered_map s以习惯它们。

我注意到,如果我使用指针作为键,当用作键的指针实际上指向一个值时,我会得到一个段错误。这是我的代码:

#include <unordered_map>
#include <stdio.h>
int main() {
    std::unordered_map<int*, int> map;
    int* key;
    //*key = 18;
    map[key] = 1893;
    printf("%dn", map[key]);
}

现在,如果我取消注释,我得到一个分割错误错误,而如果我留下它的注释,一切工作完美。为什么会发生这种情况?

您声明了一个指针,而不是一个int。指针不指向任何地方,因为您没有初始化它。没有地方可以写18,因为指针没有指向任何空间。

请注意,您的问题与无序映射完全无关。
int * key; *key = 18;将转储在任何上下文中。

使用
int key; key = 18;,
或者如果你真的想让key成为一个指针:
int * key = new int; key = 18;