2014-11-08 82 views
0

我建立a compressor based on Huffman,我用了一個Decoder的序列來存儲到文件解壓縮到一個名爲decoder.binC++系列化導致段故障

main.cpp二進制文件所需的信息,它遠遠

#include "Huffman.hpp" 

size_t hash(CodeType cd){ 
    return cd; 
} 


int main() { 
    /* ------- BUILD -------- */ 
    ..... 

    /* ------- ENCODE -------- */ 
    ..... 

    /* ------- DECODE -------- */ 

    Decoder dec(huffmanTree, root); 
    std::ofstream ofs("decoder.bin", std::ios::binary); 
    ofs.write ((char*)&dec, sizeof(Decoder)); 
    ofs.close(); 

    Decoder newDec; 
    std::ifstream ifs("decoder.bin", std::ios::binary); 
    ifs.read ((char*)& newDec, sizeof(Decoder)); 
    ifs.close(); 

    std::cout << newDec.tree.getCap(); 
    newDec.restore(); 
    newDec.decode("encoded.huf", "decoded.txt"); 
} 

但是,如果我使用的分離decode.cpp實現獨立地從main.cpp解碼處理,它不編碼工作,怪異事情發生在我的機器上。

> make -f makeDecoder 
clang++ -c --std=c++11 decode.cpp -o bin/decode.o 
clang++ bin/decode.o bin/HTree.o bin/Huffman.o bin/bitsMap.o -o decode 
> ./decode 
1000Restoring ... 
Segmentation fault: 11 

decode.cpp所有代碼:

#include "Huffman.hpp" 

int main() { 
    Decoder newDec; 
    std::ifstream ifs("decoder.bin", std::ios::binary); 
    ifs.read ((char*)& newDec, sizeof(Decoder)); 
    ifs.close(); 

    std::cout << newDec.tree.getCap(); 
    newDec.restore(); 
    newDec.decode("encoded.huf", "decoded.txt"); 
} 

(1000是容量的印刷,只是忽略它)

所以這是非常奇怪的是,同樣的代碼表現不同,和我想不通爲什麼segment fault會發生。

如果您忙於從github下載我的庫並構建此程序,那麼您可能會忽略此問題,也非常感謝。不過,這將是對我很大的幫助,如果你能:)

我的機器信息:

Apple LLVM version 6.0 (clang-600.0.54) (based on LLVM 3.5svn) 
Target: x86_64-apple-darwin14.0.0 
Thread model: posix 

回答

0

它看起來就像你有兩個主要功能。您在decoder.cpp和main.cpp中有一個,看起來您正在構建解碼器make文件的主要部分。