admin 管理员组文章数量: 1086019
我们在写一个方法时,如果希望在方法执行出错时,获取一个NSError对象,我们通常会像下面这样来定义我们的方法
1 2 3 4 5 6 7 |
+ (NSString )checkStringLength:(NSString *)str error:(NSError **)error {
if
(str.length <= 0) {
*error = [NSError errorWithDomain:@
"ErrorDomain"
code:-1 userInfo:nil];
return
nil;
}
return
str;
}
|
这段代码看着没啥问题,至少在语法上是OK的,所以在编译时,编译器并不会报任何警告。
如果我们用以下方式去调用的话,也是一切正常的:
1 2 |
NSError *error = nil;
[Test checkStringLength:@
""
error:&error];
|
不过我们如果就静态分析器来分析一下,发现会在”*error = …“这行代码处报如下的警告:
1 |
Potential
null
dereference. According to coding standards
in
‘Creating and Returning NSError Objects’ the parameter may be
null
|
这句话告诉我们的是这里可能存在空引用。实际上,如果我们像下面这样调用方法的话,程序是会崩溃的:
1 |
[Test checkStringLength:@
""
error:NULL];
|
因为此时在方法中,error实际上是NULL,*error这货啥也不是,对它赋值肯定就出错了。
这里正确的姿式是在使用error之前,先判断它是否为NULL,完整的代码如下:
1 2 3 4 5 6 7 8 9 |
+ (NSString )checkStringLength:(NSString *)str error:(NSError **)error {
if
(str.length <= 0) {
if
(error != NULL) {
*error = [NSError errorWithDomain:@
"ErrorDomain"
code:-1 userInfo:nil];
}
return
nil;
}
return
str;
}
|
实际上,对此这种方式的传值,我们始终需要去做非空判断。
本文标签: 静态 potential dereference NULL
版权声明:本文标题:静态分析中”Potential null dereference”的处理 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1738258683a1952254.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论