рекурсия — ошибка С ++ при передаче объекта строки или потока по ссылке на рекурсивную функцию

Я пытаюсь сериализовать свое дерево Хаффмана в файл, но возникла проблема с рекурсивным характером проблемы. У меня нет проблем с выводом его на консоль с использованием cout, но я получаю ошибку сегментации, когда пытаюсь сохранить ее в виде строки или записать в файл.

string putData(Node *n, string &s) {

if (n->leaf()) {
s << "[" << n->value() << "]";
} else {
s << ".";
}

if (n->left())
putData(n->left(), s);

if (n->right())
putData(n->right(), s);

}

Это та же проблема с объектом ofstream. На самом деле, после segfaults программы, я проверяю файл и его содержимое правильно. Но почему это в конце концов? Как мне остановить программу от segfaulting?

string putData(Node *n, ofstream &s) {

s.open("huffout.txt", ios::app);

if (n->leaf()) {
s << "[" << n->value() << "]";
} else {
s << ".";
}
s.close()
if (n->left())
putData(n->left(), s);

if (n->right())
putData(n->right(), s);

}

0

Решение

Ваша функция объявлена ​​для возврата string но не имеет оператора возврата, если что-то смотрит на возвращаемое значение, которое может привести к segfault. Ваш компилятор должен был предупредить вас о пропущенном возвращении, разве вы не компилируете с предупреждениями?

Кроме того, первый пример кода использует string но пытается добавить к нему operator<<По-видимому, это просто ошибка копирования и вставки.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]