代码之家  ›  专栏  ›  技术社区  ›  Jason

在分配的结构中初始化std::map在Windows上失败

  •  -5
  • Jason  · 技术社区  · 6 年前

    我有动态分配包含std::map的结构的代码。这在Mac和Linux上运行良好,但在Windows上中止程序(用VC 2017编译)。知道为什么会这样吗?

    分部结构定义:

    typedef struct trie_node_temporary_struct {
        ...
        std::map<char, struct trie_node_temporary_struct*> child_node_map;
    } trie_node_temporary_struct;
    

    在函数中:

    *node = (struct trie_node_temporary_struct*)malloc(sizeof(struct trie_node_temporary_struct));
    if (*node == NULL)
    {
        ...
    }
    memset(*node, 0, sizeof(struct trie_node_temporary_struct));
    
    // Initialize map
    (*node)->child_node_map = std::map<char, struct trie_node_temporary_struct*>(); // <-- aborts here
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Vittorio Romeo    6 年前

    你的代码看起来像是C和C++的奇怪混合。你正在使用 malloc 分配动态内存,它不调用C++对象的构造函数。你应该使用 new / delete 如果您想动态分配内存,可以使用智能指针。

    知道为什么会这样吗?

    代码不起作用的原因可能是没有调用构造函数。我建议读一本好的C++书 The Definitive C++ Book Guide and List )