ハフマン ツリーをファイルにシリアル化しようとしていますが、問題の再帰的な性質に問題があります。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 オブジェクトと同じ問題です。実際、プログラムが segfault した後、ファイルとその内容が適切であることを確認します。しかし、なぜ最後にセグメンテーション違反になるのでしょうか? プログラムのセグメンテーション違反を停止するにはどうすればよいですか?
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);
}