2016-06-27 19 views
-1

私は以下のコードをしようとすると、それはキーではなく値としてアドレスを格納し、 ので、「同じキーを二回保存されている」mallocを使用してマップキーを割り当てる方法は?

static map<const char *, int> lMap; 
    const char * msg = "hhhhh"; 

    char *buf = (char *) malloc(6); 
    strcpy(buf, msg); 

    lMap.insert(make_pair(buf, 85)); 
    buf = (char *) calloc(5, sizeof (char)); 

    strcpy(buf, msg); 
    lMap.insert(make_pair(msg, 85)); 

    cout << "size: " << lMap.size() << endl; 
    map<const char *, int>::const_iterator it2; 
    for (it2 = lMap.begin(); it2 != lMap.end(); ++it2) { 
     cout << it2->first << " | " << it2->second << endl; 
    } 

印刷結果:

size: 2 
hhhhh | 85 
hhhhh | 85 
+3

なぜ 'std :: string'を使わないのですか? – NathanOliver

+0

文字列 '' hhhhh "'は何文字ですか? *** ***ターミネーターを含む? –

+2

'malloc'はこの問題とは関係ありません。あなたのキーはポインタです。ポインタを比較することが何を意味するかを考えてください。 – juanchopanza

答えて

2

あなたドン't。代わりにstd::stringをキーとして使用してください。

const char*キーを適切に処理するための適切なコンパレータファンクタを提供していない限り、予期しない結果が発生します。

+0

コード内のクラスの1つがデストラクタにマップ値を出力していますが、std :: stringは値が破棄されたように見え、コアダンプを取得しています – 15412s

+1

@ 15412sこれは別の質問です。 'std :: string'をキーとして使用することに関連していますが、プログラムの別の部分で間違ったロジックがあります。 –

関連する問題