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

时间:2016-09-26 06:29:39

标签: c++ c++11 pointers segmentation-fault 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]);
}

现在,如果我取消注释该注释行,我会得到一个分段错误错误,而如果我将它留下来,那么一切都很完美。为什么会这样?

1 个答案:

答案 0 :(得分:1)

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

请注意,您的问题与无序地图完全无关 int * key; *key = 18;将在任何情况下转储。

使用任何一个 int key; key = 18;
或者如果你真的希望key成为指针:
int * key = new int; key = 18;