我已经发布了我的错误代码的屏幕截图。
heights
输出
请问有人可以帮助我吗?
我认为静态分析器没有看到如何_numberOfColumns
变为非零,因此它坚持分配垃圾。你需要检查你是否真的提供了一些方法_numberOfColumns
来变得非零。
通常,当我编写想要找到最大或最小值的循环时,我会将size变量初始化为最大(如果我想要最小)或最小(如果我想要最大)量,我认为这将解决大多数问题你的问题:
float shortestHeight = FLT_MAX;
for (unsigned i = 0; i < _numberOfColumns; i++)
{
// etc.
}
分析仪是正确的。如果为 0,您的代码将访问垃圾内存_numberOfColumns
,从而为 分配 0 个字节heights
,从而产生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)
将准确地告诉分析器。