gpt4 book ai didi

c++ - 堆栈溢出使用 libzip 创建存档

转载 作者:太空狗 更新时间:2023-10-29 21:23:53 29 4
gpt4 key购买 nike

开始使用 libzip ,我尝试创建一个存档并向其中添加一个文件。这是我的代码。

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() 时抛出运行时错误。

Unhandled exception at 0x00EDDD16 in Application.exe: 0xC00000FD: Stack overflow (parameters: 0x00000001, 0x002C2FFC).

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

Unhandled exception at 0x0065BC57 in Application.exe: An invalid parameter was passed to a function that considers invalid parameters fatal.

我做错了什么?

最佳答案

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

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

关于c++ - 堆栈溢出使用 libzip 创建存档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17260205/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com