0

我正在尝试将我的霍夫曼树序列化到一个文件中,但是遇到了问题的递归性质。我使用 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 对象相同的问题。实际上,在程序段错误之后,我检查了文件及其内容是否正确。但是为什么最后会出现段错误?如何阻止程序出现段错误?

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);

}
4

1 回答 1

3

您的函数被声明为返回string但没有返回语句,如果有任何东西查看可能导致段错误的返回值。你的编译器应该警告你缺少返回,你编译时不是警告吗?

Also, the first code example uses a string but tries to append to it with operator<<, presumably that's just a copy'n'paste error.

于 2012-12-30T17:49:17.493 回答