Я пытаюсь сериализовать свое дерево Хаффмана в файл, но возникла проблема с рекурсивным характером проблемы. У меня нет проблем с выводом его на консоль с использованием 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);
}
Ваша функция объявлена для возврата string
но не имеет оператора возврата, если что-то смотрит на возвращаемое значение, которое может привести к segfault. Ваш компилятор должен был предупредить вас о пропущенном возвращении, разве вы не компилируете с предупреждениями?
Кроме того, первый пример кода использует string
но пытается добавить к нему operator<<
По-видимому, это просто ошибка копирования и вставки.
Других решений пока нет …