我发布了错误代码的屏幕截图。
heights
输出
请任何人可以帮助我吗?
答案 0 :(得分:2)
我认为静态分析器没有看到_numberOfColumns
如何变为非零,因此它坚持要分配垃圾。您需要检查实际上是否为_numberOfColumns
提供了非零的方法。
通常当我编写想要找到最大值或最小值的循环时,我将 size 变量初始化为最大值(如果我想要最小值)或最小值(如果我想要最大值) )数量,我认为这将解决您的大部分问题:
float shortestHeight = FLT_MAX;
for (unsigned i = 0; i < _numberOfColumns; i++)
{
// etc.
}
答案 1 :(得分:1)
分析仪是正确的。如果_numberOfColumns
为0,您的代码将访问垃圾内存,从而为heights
分配0个字节,使heights[0]
无效。分析器不知道_numberOfColumns
可以具有哪些值,但您可以使用assert(_numberOfColumns>0)
告诉它。
以C程序为例:
int main(int argc, const char * argv[])
{
int n = argc-1;
int *a = malloc(n*sizeof(int));
for (int i=0; i<n; i++) {
a[i] = i;
}
int foo = a[0];
free(a);
return foo;
}
a
的大小由参数的数量决定。如果你没有参数n == 0
。如果您确定您的程序(或程序的那一部分)总是会将大于0的内容分配给a
,则可以使用断言。添加assert(n>0)
将完全告诉分析仪。