首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >堆栈溢出,使用libzip创建存档。

堆栈溢出,使用libzip创建存档。
EN

Stack Overflow用户
提问于 2013-06-23 11:15:58
回答 1查看 8.6K关注 0票数 3

为了开始使用libzip,我尝试创建一个归档文件并将一个文件添加到其中。这是我的密码。

代码语言:javascript
复制
string archive  = "path/to/archive.zip";
string file     = "message";
char *data      = "Hello World!";

int error = 0;
zip *archive = zip_open(path.c_str(), ZIP_CREATE, &error);
if(error)
{
    cout << "could not open or create archive" << endl;
    return false;
}

zip_source *source = zip_source_buffer(archive, data, sizeof(data), 0);
if(source == NULL)
{
    cout << "failed to create source buffer. " << zip_strerror(archive) << endl;
    return false;
}

int index = (int)zip_file_add(archive, file.c_str(), source, ZIP_FL_OVERWRITE);
if(index < 0)
{
    cout << "failed to add file to archive. " << zip_strerror(archive) << endl;
    return false;
}

zip_source_free(source);
zip_close(archive);

return true;

此代码在zip_close()调用时引发运行时错误。

在Application.exe中0x00EDDD 16处未处理的异常: 0xC00000FD:堆栈溢出(参数: 0x00000001,0x002C2FFC)。

更新:我删除了zip_source_free()调用,因为我被告知这已经由zip_file_add()完成了。此外,我检查archive,使其不包含NULL。这些更改在zip_close()引发了另一个错误。

Application.exe中0x0065BC57处的未处理异常:将无效参数传递给认为无效参数致命的函数。

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-23 11:26:01

您不应该调用zip_source_free(),因为source已经在zip_file_add()中使用并在那里释放了。

另外,您应该检查zip_open()的返回值,而不是errorp的值。文档中没有任何内容表明错误代码与0不同。但是,如果无法打开zip文件,则返回值将为NULL

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17260205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档