C++ 带有zip\源\缓冲区的libzip会导致数据损坏和/或SEGFULTS
我正在尝试使用libzip和C++ 带有zip\源\缓冲区的libzip会导致数据损坏和/或SEGFULTS,c++,libzip,C++,Libzip,我正在尝试使用libzip和zip\u source\u buffer,将数据从本地缓冲区写入zipfile std::vector buf; struct zip*z=zip_open(zipfilename.c_str(),zip_CREATE | zip_EXCL,NULL); 如果(!z){ messagelabel->setText(“打开zip文件失败”+QString::fromStdString(zipfilename)); 返回“”; } //messagelabel->set
zip\u source\u buffer
,将数据从本地缓冲区写入zipfile
std::vector buf;
struct zip*z=zip_open(zipfilename.c_str(),zip_CREATE | zip_EXCL,NULL);
如果(!z){
messagelabel->setText(“打开zip文件失败”+QString::fromStdString(zipfilename));
返回“”;
}
//messagelabel->setText(QString::fromStdString(zipfilename));
//messagelabel->setText(QString::number(ulong(z));
整数误差=0;
对于(int i=0;isetText(“未能将“+QString::fromStdString(nameinzip)+”添加到zip文件”);
错误++;
打破
}
}
如果(错误==0){
结构zip_源*s;
std::string caltext=caltotext(calfile);
cout setText(“未能将“+QString::fromStdString(nameinzip)+”添加到zip文件”);
错误++;
}
}
如果(zip_close(z)<0){
messagelabel->setText(“未能关闭zip文件”+QString::fromStdString(zipfilename));
错误++;
}
不幸的是,我在zip文件中发现了损坏的数据,在尝试调试结果时,我的程序在明显不相关的代码中出现了故障(以前可以工作)
然后,我尝试在valgrind中运行我的程序,但从
zip\u close
中得到了内存错误。我做错了什么?libzip文档似乎有误导性,zip\u add实际上并没有从源读取数据并将其放入zip,它只是将其排队放入zip。因此每个缓冲区都必须是独立的您必须确保它的使用寿命将持续到拉链关闭后
在本例中,这意味着将buf从单个std::vector更改为一个std::vector数组(每个图像一个),并将caltext的声明移到更高的范围
不相关代码中的segfault原来是一个不相关的bug(数组太小)