как остановить функцию void от переполнения стека - PullRequest
0 голосов
/ 01 мая 2018

Поскольку void ничего не возвращает, я не знаю, как получить правильный базовый вариант для функции void, такой как та, которую я пытаюсь получить.

struct TreeNode {
    char value;
    TreeNode *sibling;
    TreeNode *child;
};

void serialize(std::ostream &out, TreeNode *root) 
{
    // If the root is nullptr, print "None"
    if (root == nullptr)
        out << "None" << "\n";

    // Write out root's value
    out << root->value << "\n";

    // if there is no child
    //    write out "False"
    // else
    //    write out "True"
    //    recursively call serialize on that child
    if (root->child == nullptr)
        out << false << "\n";
    else
    {
        out << true << "\n";
        serialize(out, root->child);
    }
    // recursively call serialize on the sibling
    serialize(out, root->sibling);
}

Поможет ли мне переписать сериализацию как функцию типа TreeNode, каков будет мой базовый случай, если я это сделаю?

Примечание: это одна функция из проекта для создания структуры данных узла дерева в c ++.

1 Ответ

0 голосов
/ 01 мая 2018

В этом коде вы пытаетесь рекурсивно вызвать функцию сериализации, но условие завершения не указано. следовательно, в результате чего каждый раз при рекурсивном вызове функции стек памяти занят, что в конечном итоге приводит к переполнению стека. Добавьте точку завершения, такую ​​как оператор возврата, она должна работать нормально.

 if (root == nullptr)
        out << "None" << "\n";
    return;
    
...