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

时间:2019-01-11 14:04:34

标签: c++ c++11

我有一些代码可以动态分配一个包含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 个答案:

答案 0 :(得分:2)

您的代码看起来像是C和C ++的怪异混合物。您正在使用malloc分配动态内存,该内存不调用C ++对象的构造函数。如果要动态分配内存,则应使用new / delete(甚至更好的智能指针)。

  

知道为什么会这样吗?

您的代码无法正常工作的原因可能是未调用构造函数。我建议读一本不错的C ++书(请参阅The Definitive C++ Book Guide and List)。