0

我很感激使用 ZipArchive 库,但似乎存在内存泄漏。我不知道如何解决这个问题——它是用 C 语言编写的,我不熟悉它。我的问题是 - 是否可以自动释放行 s=(unz_s*)ALLOC(sizeof(unz_s)); 就像在这种情况下使用 Objective-C 一样?

extern unzFile ZEXPORT unzOpen2 (path, pzlib_filefunc_def)
        const char *path;
        zlib_filefunc_def* pzlib_filefunc_def;
    {

        // ...

        s=(unz_s*)ALLOC(sizeof(unz_s));
        *s=us;
        unzGoToFirstFile((unzFile)s);
        return (unzFile)s;
    }

为了清楚起见,这是泄漏位置的屏幕截图:

http://ziparchive.googlecode.com/issues/attachment?aid=-5463964192517894688&name=Screen+shot+2010-08-20+at+8.12.58+PM.png&token=8c66aa58a4826b99ba157903fbae83bb&inline=1

任何人都可以阐明我如何解决这个问题吗?谢谢。

4

2 回答 2

2

我遇到了同样的问题并通过阅读一些博客解决了。在释放对象之前,它似乎很简单地
关闭了你的 ZipArchive 对象,
它看起来像
[ZipObj UnzipCloseFile];

于 2011-07-15T04:56:04.030 回答
0

不,您不能自动释放它。自动释放仅适用于 Objective-C 对象。所以你有2个选择:

  1. 自己使用释放内存free()
  2. s将事物包装到NSDatausing 中dataWithBytesNoCopy:length:,这将获得分配数据的所有权并在NSData对象被释放时释放它。

选项 2 看起来像这样:

unz_s * s = unzOpen2(...);
NSData * boxedS = [NSData dataWithBytesNoCopy:s length:sizeof(unz_s)];

然后当boxedS被破坏时,它也会释放s

于 2010-09-08T18:02:56.403 回答