JSONKit是否会导致内存泄漏?

4
我一直在我的应用程序中使用JSONKit,但现在我已经升级到Xcode 4.5.1并运行分析后,Xcode报告JSONKit代码可能存在内存泄漏。 /Users/aleksa.topic/SVN/Apple/iTTChart/trunk/iTTChart/Other Sources/JSONKit.m:682:23: 内存从未被释放;'array'所指向的内存可能泄漏 (对于dictionary也会给出同样的潜在泄漏)。
有人有这方面的经验吗?它真的会创建内存泄漏吗,还是只是Xcode分析不够好?
3个回答

4
这是静态分析器中的误报。有一个 缺陷报告 尝试解决此问题。

有没有办法让分析器忽略它? - Aleksa

2
请参考链接,将标记为减号的行替换为标记为加号的行。
-    if((array = [array init]) == NULL) { return(NULL); }
+    if([array init] == NULL) { free(array); return(NULL); }

-    if(JK_EXPECT_F((array->objects = (id *)malloc(sizeof(id) * array->capacity)) == NULL)) { [array autorelease]; return(NULL); }
+    if(JK_EXPECT_F((array->objects = (id *)malloc(sizeof(id) * array->capacity)) == NULL)) { free(array); return(NULL); }

-    if((dictionary = [dictionary init]) == NULL) { return(NULL); }
+    if([dictionary init] == NULL) { free(dictionary);return(NULL); }

-    if(JK_EXPECT_F((dictionary->entry = (JKHashTableEntry *)calloc(1UL, sizeof(JKHashTableEntry) * dictionary->capacity)) == NULL)) { [dictionary autorelease]; return(NULL); }
+    if(JK_EXPECT_F((dictionary->entry = (JKHashTableEntry *)calloc(1UL, sizeof(JKHashTableEntry) * dictionary->capacity)) == NULL)) { free(dictionary); return(NULL); }

我不确定这是否是误报,因为我曾经遇到过这种内存泄漏的情况。这个修复程序不会泄漏。 - absessive

1

((array = [array init]) == NULL) 替换为 (dictionary == NULL),并使用 free(array) 函数代替 [array autorelease] 以修复问题。 因为它是手动分配的,所以应该手动释放。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接