2013-03-14 208 views
4

我发布了我的错误代码的截图。 enter image description here指定值为垃圾或未定义

heights输出

enter image description here

请任何一个能帮助我吗?

+0

'_numberOfColumns'的值是什么? – melvynkim 2013-03-14 10:08:07

+0

_numberOfColumms = 2; – 2013-03-14 10:08:46

+0

我怀疑你的for循环分配的数组值没有执行...可能是_numberOfColumns = 0。你能打印高度数组的内容吗? – Yogi 2013-03-14 10:10:18

回答

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)会告诉分析仪确切的。

2

我认为静态分析器没有看到如何_numberOfColumns可以变成非零,因此它坚持垃圾分配。你需要检查你是否实际上提供了一些手段来使_numberOfColumns变成非零。

通常当我写要找到最大或最小值循环,我初始化大小变量最大的(如果我想最小)或最小(如果我想最大的)量,我认为这将解决你的大部分问题:

float shortestHeight = FLT_MAX; 
for (unsigned i = 0; i < _numberOfColumns; i++) 
{ 
    // etc. 
}