【问题标题】:Assign value is garbage or undefined赋值是垃圾或未定义
【发布时间】:2013-03-02 14:54:29
【问题描述】:

我已经发布了我的错误代码的屏幕截图。

heights 输出

请问有人可以帮帮我吗?

【问题讨论】:

  • _numberOfColumns的值是多少?
  • @ravijimagna:继续不会影响任何事情,但是那是浪费。
  • 请向我们展示数组内容...这可能会有所帮助
  • @Sebastian 不,分析器指出值垃圾,而不是可能是垃圾,所以它至少不准确。
  • @Sebastian 所以你从未见过“在线分配的对象的潜在泄漏......”消息?

标签: ios objective-c memory-management undefined garbage


【解决方案1】:

我认为静态分析器没有看到 _numberOfColumns 如何变为非零,因此它坚持分配垃圾。您需要检查您是否确实为_numberOfColumns 提供了一些方法以使其变为非零。

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

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

【讨论】:

    【解决方案2】:

    分析器是正确的。如果_numberOfColumns 为0,您的代码将访问垃圾内存,从而为heights 分配0 个字节,使heights[0] 成为垃圾。分析器不知道_numberOfColumns 可以有哪些值,但您可以使用assert(_numberOfColumns&gt;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&gt;0) 将准确地告诉分析器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-14
      • 2021-10-15
      • 2020-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-01
      • 1970-01-01
      相关资源
      最近更新 更多