在C ++

时间:2017-10-16 03:46:20

标签: c++ stl

我的自定义结构中有std::unordered_map<char, Node*>。 我想用空map初始化它。我做错什么了吗? 我尝试了两种初始化,它们都给我相同的结果。

以下声明:

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的大小会非常大。

1 个答案:

答案 0 :(得分:2)

实际上,当您创建地图时,默认情况下它已经是空的 另一方面,在创建C ++对象时,需要使用new,而不是malloc。 基本区别在于new调用对象的构造函数,但malloc没有。
您可以在此处阅读更多内容:In what cases do I use malloc vs new?