霍夫曼,堆栈溢出

Huffman,Stack overflow

本文关键字:栈溢出 堆栈 霍夫曼      更新时间:2023-10-16
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。