2016-09-26 9 views
-2

私はstd::unordered_mapをテストしていましたが、プロジェクトで実際に使用する前に慣れていました。ポインタがstd :: unordered_mapの何かを指しているときのセグメンテーションフォールト

私はキーとしてポインタを使用すると、キーとして使用されているポインタが実際に値を指しているときにsegfaultエラーが発生することに気付きました。私はそのコメント行のコメントを外した場合

#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]); 
} 

は今、私は、セグメンテーションフォールトエラーを取得し、私はそれがcommmentedままにしながら、すべてが完璧に動作します:これは私のコードです。なぜこれが起こるのですか?

+1

あなたはポインタにメモリを割り当てるのを忘れて:あなたは本当にkeyがポインタになりたい場合は


int key; key = 18;
かのいずれかを使用します。 'int * key = new int' – PRP

+0

コメント行は初期化されていないポインタをデリファレンスします。どのように動作すると思いますか? –

+0

この[ポインタチュートリアル](http://www.cplusplus.com/doc/tutorial/pointers/)を見てください。これはあなたが知る必要があるすべて、なぜこれがうまくいかないかを説明します。 – muXXmit2X

答えて

1

intではなく、ポインタを宣言しました。あなたがそれを初期化しなかったので、ポインタはどこにも指していません。ポインターが任意のスペースを指していないので、18を書き込む場所はありません。

問題は、順序付けられていないマップとはまったく関係がありません。
int * key; *key = 18;はどんな状況でもダンプします。
int * key = new int; key = 18;

関連する問題