簡體   English   中英

霍夫曼解碼循環未迭代

[英]Loop for Huffman decoding not iterating

我的c ++類的for循環遇到麻煩。 我正在從使用霍夫曼樹在上一部分中編碼為二進制文件的文件中讀取數據,現在我們需要制作一個解碼器。 我正在嘗試使用ifstream :: read從文件中讀取。 這是我的代碼...

ifstream in;
in.open(file_name.c_str());
unsigned char uChars;
in.read((char*) &uChars, 2); //reads in the amount of unique characters
if(in.fail()){
    cout << "Error";
}else{
    int i = (int) uChars;
    int runs;
    for(runs = 0; runs < i; runs++){
        unsigned char rChar;
        unsigned char charFreq;
        in.read((char*) &rChar, 1); //reads in the character
        in.read((char*) &charFreq, 4); //reads in characters frequency
        frequency_table[(int) rChar] = (int) charFreq;
        //frequency_table is declared in constructor
        //unsigned frequency_table[256];
    }
}
in.close();

讀取功能和將值保存到數組的工作都很好,但是問題在於迭代變量運行。 每次運行循環時,我都使用gdb進行調試並打印出run的值,然后得到... 0,1,1,1,1,1,1,20160在這種情況下,i為6,因此它僅應運行6次,但運行循環7次,然后將不應保存的值保存到我的數組中,導致解碼器稍后輸出錯誤的值。 是什么導致我的runs變量不應該增加?

您有幾次無效的寫入:

in.read((char*) &uChars, 2); //reads in the amount of unique characters
in.read((char*) &charFreq, 4); //reads in characters frequency

這些都可能破壞內存; 后者可能是罪魁禍首,因為它在循環中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM