我正在使用MiniZip解压缩iPhone项目中的文件。一切正常,但我在这行的MiniZip代码中泄漏了仪器:
unzip.c 第493行
s=(unz_s*)ALLOC(sizeof(unz_s));
*s=us;
unzGoToFirstFile((unzFile)s);
return (unzFile)s;
我知道分配了ALLOC的var被返回而不是被释放。在objective-C中,我只是做一个自动释放,但我怎么能在普通的C中实现呢?
谢谢, 文森特。
答案 0 :(得分:2)
该方法的调用者负责s
,并且当不再需要它来避免内存泄漏时,必须free()
。这是C中的惯例。
您必须绑定第三方GC库,可能类似于Hans Boehm's GC for C/C++。但是,我的建议是在你自己适当时释放内存。你会遇到那种麻烦。
答案 1 :(得分:1)
free(s);
(填充到15个字符)
答案 2 :(得分:1)
unzOpen()用于分配句柄并将其返回给调用者。获得该处理后,您可以对此zip存档进行操作(即搜索文件,从存档中提取文件,......)。完成所有操作后,您必须通过调用为您解除分配的unzClose来显式关闭zip-archive。
以下是从存档中提取特定文件的示例:
unzFile hArchive;
unsigned char buffer[1024];
hArchive = unzOpen("abc.zip");
if (hArchive != NULL) {
if (unzLocateFile(hArchiveFile, "example.txt", 0) == UNZ_OK) {
if (unzOpenCurrentFile(hArchiveFile) == UNZ_OK) {
while (unzReadCurrentFile(hArchiveFile,buffer,sizeof(buffer)) > 0) {
/* write buffer to another file / to stdout / ... */
}
unzCloseCurrentFile((unzFile) *hArchiveFile);
}
}
}
unzClose(hArchive);
答案 3 :(得分:0)
无论这是什么功能,问题都不在于该功能。它应该返回一个已分配的对象,而不是在返回之前无用的分配和释放。问题在于您使用库。你永远不会调用函数来释放你从调用这个函数中获得的指针。