2017-10-16 25 views
-1

我在我的自定義結構中有一個std::unordered_map<char, Node*>。 我想用空的map對它進行初始化。我做錯什麼了嗎? 我已經嘗試了2種初始化,他們都給了我相同的結果。在我的結構中初始化一個空的unordered_map在C++中

下面的語句:

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

有時會導致成功,該地圖的大小爲0,這是應該的。在大多數情況下,這將在初始化過程中失敗,並會以沒有初始化的map來生成以下錯誤:

的malloc:被釋放的指針沒有被分配

這會給我初始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新?](https://stackoverflow.com/questions/184537/in-what-c​​ases-do-i-use-malloc-vs-new) –

回答

0

實際上,當您創建一個地圖時,默認情況下它已經是空的。
另一方面,在創建C++對象時,您需要使用new而不是malloc。 基本區別在於new調用對象的構造函數,但是malloc沒有。
你可以在這裏閱讀更多:In what cases do I use malloc vs new?