将值写入其他变量后,c free int数组函数中的功能



我想免费的内存分配给int array in函数后的函数,分配值从数组元素到整数变量。

我有代码:

 int u(int n)
   {
    int* values = (int*)malloc(sizeof(int)*n + 1);
    int out = 0;
    for (int i = 0; i < 3; i++) 
      values[i] = 1;
    if (n < 3) 
      return 1;
    else 
    {
        for (int i = 3; i <= n; i++)
            values[i] = values[i - values[i - 1]] + values[i - values[i - 2]];
    }
    out = values[n];
    free(values);
    return out;
}

为什么在将值写入另一个变量之后,我不能自由分配给数组的内存?int有另一个地址,然后分配了内存,我想做的一切只有从数组到另一个变量的值。有人可以解释我为什么不能做吗?

请记住,sizeof(int)*n + 1等于(sizeof(int)*n) + 1。您为n整数值分配空间,再加上一个字节

这意味着您在else案例中的循环 will 在范围内(除非 sizeof(int) == 1,否则很少有平台,甚至历史上)。并从分配的内存的范围内写入不确定的行为

通常,从范围写出弄乱内存分配器使用的私人和内部数据,导致调用free时遇到问题。

解决方案是更改分配,以便分配n + 1整数(即sizeof(int) * (n + 1))。或将循环条件更改为i < n

请看一下评论。

int u(int n)
   {
    if (n < 3)  // moved it here. If n it's smaller you have a smaller array; move it ahead of malloc/free’s
       return 1;
    int* values = (int*)malloc(sizeof(int)*(n + 1));
    int out = 0;
    for (int i = 0; i <= n; i++)
    {
       if(i<3) 
          values[i] = 1;
       else
          values[i] = values[i - values[i - 1]] + values[i - values[i - 2]]; // this is suspicious; what do you want to obtain ?
    }
    out = values[n];
    if(values!=NULL)
       free(values);
    return out;
}

相关内容

  • 没有找到相关文章

最新更新