yourtion / LearningMasteringAlgorithms-C

Mastering Algorithms with C 《算法精解:C语言描述》源码及Xcode工程、Linux工程
MIT License
744 stars 275 forks source link

压缩样例运行错误 #4

Closed alvisisme closed 5 years ago

alvisisme commented 6 years ago

编译lz77样例运行的时候出现错误.

Compressing with Huffman coding
Compressing...Done
Uncompressing...Done
-> osize=5983, csize=3272, rsize=5983
Data was restored OK

Compressing with LZ77
Compressing...Done
Uncompressing...Done
-> osize=5983, csize=1527, rsize=5983
Data was not properly restored
-> original[0]="/"
-> restored[0]=0x00

编译环境:

voyagingmk commented 6 years ago

Mac也是这样,LZ77出问题

yourtion commented 6 years ago

我后来看了官方的源码,好像也是有问题的,暂时还没时间去深究。

https://resources.oreilly.com/examples/9781565924536/blob/master/examples_unix/source/lz77.c

yourtion commented 5 years ago

@alvisisme @voyagingmk 感谢 @angeltears 对问题作出修复 https://github.com/yourtion/LearningMasteringAlgorithms-C/pull/7

但是我在 Mac 下运行还是报错的

Compressing with LZ77
Compressing...Done
Uncompressing...Done
-> osize=5983, csize=1584, rsize=5983
Data was not properly restored
-> original[0]="/"
-> restored[0]=0x00
alvisisme commented 5 years ago

用travis ci 做个自动化构建和测试吧

alvisisme commented 5 years ago

写了个简单的travis ci脚本测试lz77压缩,linux下问题并没有修复。

travis ci 脚本

language: c
compiler: gcc
before_install:
  - mkdir -p build
script:
  - cc source/*.c Example/compress/main.c -lm -I ./include -o build/compress
  - cp Example/compress/sample.txt build/sample.txt
  - cd build && ./compress
branches:
  only:
  - master 

构建日志

https://travis-ci.org/alvisisme/LearningMasteringAlgorithms-C/builds/464742163

原始的编译脚本中构建命令默认没有链接 -lm 参数,至少compress是没法编译成功的。

yourtion commented 5 years ago

@alvisisme 已经修复构建脚本问题同时添加了自动化测试:https://travis-ci.org/yourtion/LearningMasteringAlgorithms-C

失败:https://travis-ci.org/yourtion/LearningMasteringAlgorithms-C/jobs/464756848

yourtion commented 5 years ago

@angeltears @alvisisme 我试了在32位下编译运行,是可以的

// sudo apt-get install gcc-multilib
$ cc source/*.c Example/compress/main.c -I ./include -lm -m32 -o build/compress
Compressing with Huffman coding
Compressing...Done
Uncompressing...Done
-> osize=5983, csize=3272, rsize=5983
Data was restored OK

Compressing with LZ77
Compressing...Done
Uncompressing...Done
-> osize=5983, csize=1527, rsize=5983
Data was restored OK
yourtion commented 5 years ago

感谢 @angeltears 提供的思路,确实是long的问题,已经Fix: https://github.com/yourtion/LearningMasteringAlgorithms-C/commit/c9ece6353a95899239949c6a2512dc45c20df230

@alvisisme @voyagingmk

image

终于pass了