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

标签 c++ recursion segmentation-fault tail-recursion

<分区>

我正在尝试将我的霍夫曼树序列化为一个文件,但对问题的递归性质有疑问。我可以使用 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<< 附加到它,大概这只是一个复制粘贴错误。

关于通过引用递归函数传递字符串或流对象时的 C++ 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14093006/

相关文章:

c++ - 通过来自另一个类的指针访问时包含 "random"值的类的数组属性

c++ - 在 C++ 中如何通过名称获取进程句柄?

php - 我需要一个 array_keys_recursive()

c - C 中的递归不返回字符串值

Javascript递归settimeout

c - 测试用例中的段错误

c++ - 将文件中的非连续 block 映射到连续的内存地址

c++ - glGenBuffers 因段错误而崩溃

c - 为什么运行此函数时会出现段错误?

c++ - MD5暴力破解——高效的多线程实现