我在解放阵列时遇到了麻烦。我尝试了不同的方法,尝试通过一个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;
}
答案 0 :(得分:3)
首先,您在分析数据之前甚至不知道维度是什么......这将导致未定义的行为,因为r
和c
具有未定义的值。
要解决此问题,请在两个malloc
之后移动scanf
来电。
其次,您只需拨打malloc
一次 - 因此,您只需要/应该拨打free
一次。摆脱两个for
循环,中间有free
。
答案 1 :(得分:0)
[致电malloc()
时,很少有变数,例如r
,c
有未定义的值。初始化后拨打电话。]
free()
仅适用于您malloc()
的内容。因为array
是唯一的malloc-ed,所以这是唯一需要释放的东西; <循环中free()
的调用不必要不正确。