问题标签 [clang-static-analyzer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
748 浏览

ios - 如何让扫描构建静态分析器了解 iOS ARC'd 代码

嗨,我已经从http://clang-analyzer.llvm.org/scan-build.html安装了命令行实用程序 scan-build 。

当我在使用 ARC 的 Xcode 4.2 项目上运行它时,我收到大量潜在的内存泄漏警告,因为分析器错误地认为我忘记了手动释放内存。

最新版本 (checker-258) 是否正确支持 ARC?发行说明说它应该(http://clang-analyzer.llvm.org/release_notes.html)但这不是我看到的证据。

谢谢你的帮助..

0 投票
4 回答
597 浏览

objective-c - 将变量初始化为零是一种好习惯吗?

将变量初始化为好习惯nil吗?

我问这个是因为当我在我的项目上运行分析器时会收到警告。

当我更改代码时,警告消失了:

0 投票
1 回答
3365 浏览

clang - 如何使 Clang 的“扫描构建”与 SCons 一起使用?

我有一个用SCons构建的项目,我正在尝试使用Clang 静态分析器来分析代码。但是,运行时

SCons 似乎忽略了scan-build. 我怎样才能使这项工作?

0 投票
2 回答
1482 浏览

ios - CFRelease 中的空指针(由静态 anylizer 告知)

我得到了这个代码:

但是当我运行静态分析器时,它告诉我:

调用 CFRelease 时的空指针参数

但根据我的逻辑,我应该发布由 CGImageDestinationCreateWithData 创建的CGImageSourceRef

另外我认为释放它可能是一个错误,因为我只是在桥接它,这意味着 arc 仍然控制该对象,因为它最初是一个NSMutableData对象。

更糟糕的是,我读到 CFRelease(Null) 不好。

我非常困惑,任何帮助将不胜感激。

编辑:

好的,我在将指针发送到 CFRelease 之前对指针进行了登录,它们就在那里!

回到最初的问题,为什么静态分析器告诉我我正在发送一个空指针参数?我该如何解决/静音这个?

谢谢

PD:有没有可能我不是发送一个空指针而是一个指向空的指针?

0 投票
1 回答
381 浏览

ios - iOS 应用内存警告

运行静态分析器后,我有大约 500 多个内存警告。这是我应该关注并花时间修复的事情,还是真的无助于改善应用程序崩溃?

谢谢!

0 投票
2 回答
455 浏览

objective-c - 使有关释放 CGMutablePathRef 对象的编译器警告静音

我启用了静态分析器,但它告诉我在该执行路径的末尾该对象没有被释放,因此可能导致内存泄漏。但是,我将对创建的对象的引用传递给另一个将释放它的类。我想知道是否有方法或关键字告诉编译我稍后会释放这个对象。

我正在寻找类似自动释放的东西。

顺便说一句,我正在使用ARC。

我这样创建对象:

并像这样传递它:

在我的 flowView 类中,我有这个方法可以释放它。

我已经尝试查看 GCPath 文档,但没有运气。

谢谢

0 投票
2 回答
828 浏览

objective-c - init 方法和“具有 +0 保留计数的对象返回给调用者,其中预期 +1(拥有)保留计数” - 误报?

首先:我明白,为什么会存在这个警告,我只是无法解释自己,为什么会在这种情况下触发它。官方的 Cocoa 内存管理策略如下:“您拥有您创建的任何对象您使用名称以“alloc”、“new”、“copy”或“mutableCopy”开头的方法创建对象(例如,alloc、 newObject 或 mutableCopy)。

您可以使用保留“获取对象的所有权”

我知道有这样的代码:

Afaik 这是来自 clang 的误报,不是吗?我的意思是,增加保留计数的唯一方法是“保留”以及名称以“alloc”、“new”、“copy”或“mutableCopy”开头的所有方法,因此“init”不会增加保留计数,但在调用者上传递,以传递类的“分配”方法的返回值,所以实际上“init”应该返回一个+0保留计数,而不是一个+1,是不是吗?它只是返回具有相同保留计数的对象,它已被传入。现在在该对象上调用“foo”也不会更改保留计数,因此这段代码应该是完全合法的,实际上它工作得很好,并且保留计数在程序的整个生命周期内都是正确的,

0 投票
0 回答
147 浏览

iphone - 为什么静态分析仪没有显示泄漏?

这是我的源文件中的一段代码。如果您在属性中有保留,内存管理说添加一个释放和零。我没有这样做,当我也运行静态分析器时,她没有抱怨为什么?我应该启用特殊设置以将其显示为错误或泄漏吗?

有什么问题?这是开发人员的责任还是只是编译器或分析器未强制执行的最佳实践?

0 投票
2 回答
297 浏览

objective-c - 内存泄漏误报

我的模型中有一个简单的方法来创建一个包含其属性的 NSDictionary 对象。不幸的是,“分析”认为这种方法正在泄漏内存:

在第 76 行分配并存储在“dic”中的对象的潜在内存泄漏(此处用点标记)。

我没有使用 ARC。

PS:对于进来的人来说,我发布的原始代码是正确的——它有一个自动发布。之后我对其进行了编辑,因此内存泄漏会再次出现并准确询问原因。

0 投票
1 回答
618 浏览

objective-c - 分析器关于不正确递减的警告

我收到有关某些 CGImageRef 对象的静态分析器警告。警告是“调用者此时不拥有的对象的引用计数不正确递减”。但是,我希望它归调用者所有。我需要在我的 Obj-C 方法中插入一些特殊的措辞吗?当我让一个 C 函数逐行逐行执行完全相同的事情时,警告就会消失。我将它们分开的原因是因为有时我的应用程序使用 CGImage(用于编辑),有时它使用 UIImage(用于设置 UIImageView)。

以下是相关代码(精简至相关要素):

在我返回之前释放 CGImage 没有意义吗?那么它只是无效的记忆。那么这是暗示我应该使用 C 函数吗?还是静态分析器根本不检查 C 函数。我cgImageFromCompressedData:withSize:变成CGImageCreateWithCompressedData(NSData *compressedData, CGSize size)并喜欢魔法,没有更多的警告。我应该忽略这些警告,还是它们有一些优点?我是否必须在我的 Obj-C 方法名称中添加单词“new”或“alloc”才能使它们消失?