2017-10-16 71 views
-1

私のカスタム構造内にstd::unordered_map<char, Node*>があります。 空にするmapで初期化します。私は間違ったことをしましたか? 2種類の初期化を試しましたが、どちらも同じ結果をもたらします。私の構造体内の空のunordered_mapをC++で初期化

次の文は:

newStructure->map = unordered_map<char, Node*>(); 

時には成功をもたらし、このマップの大きさは、それがあるべき0、です。 malloc関数

:ほとんどの時間、これは初期化中に失敗し、次のエラーがmapの無い初期化して生成されるポインタが解放されているが

を割り当てられていませんでしたこれは私を与えるだろう極端な巨大なサイズの最初のstd::unordered_map。地図のサイズは88029716824088です。

空のstd::unordered_map構造体を正しく初期化するにはどうすればよいですか?

私の構造は次のように定義されています。

struct Node { 
    char letter; 
    unordered_map<char, Node*> next; 
    bool hasEnd; 
    static Node* init(char); 
} 

そして、私のinitializerはこのように定義されています

Node* Node::init(char letter) { 
    Node *newNode = (Node*) malloc(sizeof(Node)); 
    newNode->letter = letter; 
    newNode->hasEnd = false; 
    return newNode; 
}; 

時には、nextのサイズは非常に膨大な数になります。

+0

マップを定義すると既に空です。 – user1438832

+0

@ user1438832ですが、マップのサイズが非常に大きくなることがありました。それはどうすれば可能ですか? – Judgelight

+4

あなたは 'malloc'を使ってC++オブジェクトを割り当てていませんか? [どのような場合にmalloc vs newを使うべきですか?](https://stackoverflow.com/questions/184537/in-what-c​​ases-do-i-use-malloc-vs-new) –

答えて

0

マップを作成すると、実際にはデフォルトでは既に空になっています。
一方、C++オブジェクトを作成する場合はmallocではなく、newを使用する必要があります。 基本的な違いは、newはオブジェクトのコンストラクタを呼び出しますが、mallocはオブジェクトのコンストラクタを呼び出します。
あなたはもっとここに読むことができます:In what cases do I use malloc vs new?

関連する問題