我有一些代码可以动态分配一个包含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
答案 0 :(得分:2)
您的代码看起来像是C和C ++的怪异混合物。您正在使用malloc
分配动态内存,该内存不调用C ++对象的构造函数。如果要动态分配内存,则应使用new
/ delete
(甚至更好的智能指针)。
知道为什么会这样吗?
您的代码无法正常工作的原因可能是未调用构造函数。我建议读一本不错的C ++书(请参阅The Definitive C++ Book Guide and List)。