Сбой инициализации std :: map в выделенной структуре в Windows - PullRequest
0 голосов
/ 11 января 2019

У меня есть код, который динамически выделяет структуру, содержащую 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 голосов
/ 11 января 2019

Ваш код выглядит как странная смесь C и C ++. Вы используете malloc для выделения динамической памяти, которая не вызывает конструкторы объектов C ++. Вы должны использовать new / delete (или даже лучше, умные указатели), если вы хотите динамически распределять память.

Есть идеи, почему это так?

Причина, по которой ваш код не работает, скорее всего, заключается в том, что конструкторы не вызываются. Я предлагаю почитать хорошую книгу по С ++ (см. Полное руководство по книге и список С ++ ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...