在c ++应用程序中使用lzo库

时间:2010-03-10 08:47:04

标签: c++ compression lzo

我在我们的应用程序中使用了lzo库。提供的版本是1.07。 他们给了我.lib以及一些头文件和一些.c源文件。

我按照规格设置了测试环境。我能够在我的应用程序中看到lzo例程函数。

这是我的测试应用程序

#include "stdafx.h"
#include "lzoconf.h"
#include "lzo1z.h"
#include <stdlib.h>


int _tmain(int argc, _TCHAR* argv[])
{
    FILE * pFile;
    long lSize;
    unsigned char *i_buff;
    unsigned char *o_buff;

    int i_len,e = 0;
    unsigned int o_len;

    size_t result;

    //data.txt have a single compressed packet 
    pFile = fopen("data.txt","rb");

    if (pFile==NULL) 
        return -1;

    // obtain file size:
    fseek (pFile , 0 , SEEK_END);
    lSize = ftell (pFile);
    rewind (pFile);

    // allocate memory to contain the whole file:
    i_buff = (unsigned char*) malloc (sizeof(char)*lSize);
    if (i_buff == NULL) 
        return -1;

    // copy the file into the buffer:
    result = fread (i_buff,1,lSize,pFile);
    if (result != lSize) 
        return -1;

    i_len = lSize;
    o_len = 512;

    // allocate memory for output buffer
    o_buff = (unsigned char*) malloc(sizeof(char)*o_len);

    if (o_buff == NULL) 
        return -1;
     lzo_memset(o_buff,0,o_len);    
    lzo1z_decompress(i_buff,i_len,o_buff,&o_len,NULL);

    return 0;   
}

它在最后一行提供访问冲突。

lzo1z_decompress(i_buff,i_len,o_buff,&o_len,NULL);
上面提到的库函数中的

lzo1z_decompress        ( const lzo_byte *src, lzo_uint  src_len,
                                lzo_byte *dst, lzo_uint *dst_len,
                                lzo_voidp wrkmem /* NOT USED */ );

有什么问题?

2 个答案:

答案 0 :(得分:0)

您确定512字节对于解压缩数据来说足够大吗?您不应该使用任意值,而是应该在压缩文件时将原始大小作为标题存放:

LZO Decompression Buffer Size

您可能应该使您的数据类型与接口规范相匹配(例如o_len应该是lzo_uint ...您传递的是地址,因此实际的基础类型很重要。)

除此之外,它是开源的。那么为什么不用调试信息构建lzo并进入它以查看问题所在?

http://www.oberhumer.com/opensource/lzo/

答案 1 :(得分:-1)

感谢大家的建议和意见。

问题在于数据。我已成功解压缩itp>