在C中释放malloc'd 2d数组的麻烦

时间:2016-11-18 00:28:31

标签: c arrays multidimensional-array malloc

我在解放阵列时遇到了麻烦。我尝试了不同的方法,尝试通过一个for循环释放,但我老实说真的卡住了。这是我的代码,感谢任何帮助!

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]){

int r,c,i,j, *array;
  int sum = 0;
  array = (int *)malloc(r*c*sizeof(int));

  printf("Enter the number of rows: ");
  scanf("%d", &r);
  printf("Enter the number of columns: ");
  scanf("%d", &c);

  for(i=0;i<r;i++){
    for(j=0;j<c;j++){
      array[i*c+j] =+ i+j;
      sum = sum + array[i*c+j];    
  }
  }
  printf("The sum of the array is: %d",sum);
  for(i=0;i<r;i++){
    for(j=0;j<c;j++){
      free(array[i*c+j])
}
  }
  free(array);
  return 0;
}

2 个答案:

答案 0 :(得分:3)

首先,您在分析数据之前甚至不知道维度是什么......这将导致未定义的行为,因为rc具有未定义的值。

要解决此问题,请在两个malloc之后移动scanf来电。

其次,您只需拨打malloc一次 - 因此,您只需要/应该拨打free一次。摆脱两个for循环,中间有free

答案 1 :(得分:0)

[致电malloc()时,很少有变数,例如rc有未定义的值。初始化后拨打电话。]

free()仅适用于您malloc()的内容。因为array是唯一的malloc-ed,所以这是唯一需要释放的东西; <循环中free()的调用不必要不正确。