通过引用递归函数传递字符串或流对象时出现的段错误
C++ segfault when passing a string or stream object by reference to recursive function
我正试图将我的霍夫曼树序列化到一个文件,但问题的递归性质存在问题。我使用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++出现错误:错误 1 错误 C2601:'circle':本地函数定义是非法的
- 如何摆脱C ++中的分段错误错误?
- Clang 8 带有静态 constexpr 和数组的链接器错误 - 错误是什么以及如何解决它?
- 为什么每当我尝试运行此链接列表删除功能时都会收到分段错误错误?
- 如何解决分段错误错误C++
- 作为参数模板的模板类:MSVC 错误 - 错误 C2977:模板参数过多 (C++98)
- 安卓工作室 |CPP 文件错误错误: 位图库中对"AndroidBitmap_unlockPixels"的未定义引用
- 卷曲给出分段错误错误
- 无法访问 Arduino 结构字段。错误"退出状态 1。xxxx 不命名类型"
- 错误错误 C2872:"布尔值":kinect.h 的不明确符号
- C++打印模板容器错误(错误:"运算符<<"的不明确重载)理解?
- 结构的分割错误错误
- 为什么此代码返回分段错误错误?
- 错误错误:无法编译内置功能
- 分段错误错误C++
- C++ 1Z 错误:错误:演绎指南中声明中的显式限定
- 使用对数据类型的向量的哈希表中的分段错误错误
- 为什么此代码会导致分段错误错误
- JNA结构字段值错误
- C++段故障错误