通过引用递归函数传递字符串或流对象时出现的段错误

C++ segfault when passing a string or stream object by reference to recursive function

本文关键字:段错误 错误 对象 递归函数 引用 字符串      更新时间:2023-10-16

我正试图将我的霍夫曼树序列化到一个文件,但问题的递归性质存在问题。我使用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);
}

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

另外,第一个代码示例使用string,但试图用operator<<附加到它,大概这只是一个复制粘贴错误。