0
我建立a compressor based on Huffman,我用了一個Decoder
的序列來存儲到文件解壓縮到一個名爲decoder.bin
C++系列化導致段故障
在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