2017-10-16 20 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?