如何构造结构指针映射?

我正在尝试使用结构和映射进行尝试。我想出了这样的代码:

#include<bits/stdc++.h>
using namespace std;

typedef struct trienode
{
    map <char,struct trienode*> children;
    bool eow;
}trienode;

void insertnode(trienode &n, string s, int i)
{
    trienode* newnode = (trienode*) malloc(sizeof(trienode));
    newnode->eow=0; 
    n.children.insert({s[i],newnode});       //The problem (occasionaly) started here.
    if(s[i+1] == '\0')
    {
       n.children[s[i]]->eow =1; 
    }
    else
    {
        insertnode(*n.children[s[i]], s, i+1);      //Here I get the error
    }
}

bool search(trienode &n, string s, int i)
{
    trienode* newnode = (trienode*) malloc(sizeof(trienode));
    if(n.children.insert({s[i],newnode}).second) return 0;
    else
    {
        if(n.eow) return 1;
        search(*n.children[s[i]], s, i+1);
    }
}

int main()
{
    string sentence;
    string word;
    trienode root;

    sentence= "there is the answer";
    stringstream ss (sentence);


    while(ss>>word)
    {
        cout<<word<<endl;
        insertnode(root, word, 0);
    }

    word="the";
    if(search(root, word, 0)) cout<<"Found!"<<endl;
}

我提供了完整的代码,希望对您有所帮助。我用评论标记了问题。 在错误点,VScode调试器将分段错误指向stl_function.h。

  template<typename _Tp>
    struct less : public binary_function<_Tp, _Tp, bool>
    {
      _GLIBCXX14_CONSTEXPR
      bool
      operator()(const _Tp& __x, const _Tp& __y) const
      { return __x < __y; }                                 //HERE the fault occurs
    };

x值在局部值处显示正确,但不显示y的任何值。

对我来说似乎很奇怪的是,有时问题会在不同的地方发生。(或至少发生了)如//所示,问题(偶然地)从这里开始。在这种情况下,错误发生在stl_pair.h

    explicit constexpr pair(const pair<_U1, _U2>& __p)
    : first(__p.first), second(__p.second) { }

      constexpr pair(const pair&) = default;        //HERE
      constexpr pair(pair&&) = default;

首先我是在做根本上是错误的事情吗?现在通常在第二个递归调用中抛出异常,我提供了另一个作为参考。如果问题看起来井井有条或模棱两可,我感到非常抱歉,我不知道进一步扩大的范围。寻找任何帮助。