霍夫曼,堆栈溢出
Huffman,Stack overflow
void decodeFile(ibstream& infile, Node* encodingTree, ostream& file) {
// initializing map here.
string code = "";
/*while (true) {
code += integerToString(infile.readBit());
if (map.containsKey(code)) {
if (map[code] == PSEUDO_EOF) break;
file.put(map[code]);
code = "";
}
}*/
bitToString(infile,file,code,map);
}
给定的方法与注释部分工作良好,我试图做递归,而不是while循环。
void bitToString(ibstream& infile, ostream& file,string& code,Map<string,ext_char>& map){
code += integerToString(infile.readBit());
if (map.containsKey(code)) {
if (map[code] == PSEUDO_EOF) return;
file.put(map[code]);
code="";
}
bitToString(infile,file,code,map);
}
但是,这种递归会在大文件上产生堆栈溢出错误。
Huffman Encoding.exe中0x621dffde的未处理异常:0xC00000FD:Stack overflow .
函数嵌套是有限制的。如果你在函数中尝试ex.nest函数10000次,你会得到错误。您可以使用递归来进行霍夫曼解码,但您需要将其与迭代(或第二次递归)结合起来。您可能应该在找到正确的代码后重置递归,并迭代到下一个代码,直到EOF。
相关文章:
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 我的 int main() 中出现堆栈溢出错误
- C++ 对象数组堆栈溢出
- 有没有一种方法可以捕获进程中的堆栈溢出?C++Linux
- 对象接收堆栈溢出异常 c++ 的排序向量
- 将公共递归转换为尾递归,因为大型输入的堆栈溢出
- C++ 中递归期间的堆栈溢出
- 启动 dll 时 C# 环境堆栈溢出
- 在C++中使用数组时如何防止堆栈溢出?
- 如何修复递归函数导致的堆栈溢出错误?C++
- 当我尝试为结构分配新指针时出现堆栈溢出错误
- 为什么析构函数无休止地调用自己(导致堆栈溢出)?
- 为什么堆栈溢出?如有建议,不胜感激
- 主函数执行时C++堆栈溢出异常
- 如何在不导致堆栈溢出的情况下计算非常大的数字和很小的 HCF.我正在使用欧几里得算法
- 递归克隆图时的堆栈溢出
- 防止 CRTP 特征码在"pure virtual"调用中堆栈溢出
- 静态数组溢出堆栈(seg 错误 11)仅在类定义内部时,否则不会..?
- 使用递归的溢出堆栈
- c++中栈溢出和分段错误的危险