我正在尝试释放我为2D阵列分配的内存。
代码工作正常,但编译时总是有警告。
我尝试了两种不同的方法,但每次都会出现一个新警告。
int* array = fillArray(); //malloc (n*m*sizeof*array)
...
DeallocateMemory(array, n*m); //Where n and m are length and height
void DeallocateMemory(int* array, int length)
{
for (int i = 0; i < length; i++){
//free(array[i]);
//free((void*)array[i]);
}
}
free(array);
好的,首先,我写了free(array[i])
,但警告说:
*传递free
的参数1使得指针来自整数而没有强制转换
注意:预期void*
但参数类型为int*
所以我写了void*
,但现在警告是:
转换为来自不同大小的整数
的指针我应该怎样做才能摆脱这两个错误?谢谢!
答案 0 :(得分:2)
由于array
是指向int
的指针,因此array[i]
是int
;尝试free(array[i])
与尝试释放整数是一样的 - 这没有任何意义,这就是编译器所抱怨的。
假设这是一个保持整数的平面数组,你需要做的就是:
free(array);
答案 1 :(得分:2)
只需说free(array);
无需释放数组的每个位置。在数组的每个位置,存储int
,释放导致警告的int
。
如果你有二维数组,那么只有你的方式才有意义。
//Allocate the memory
int** array = malloc(n * sizeof(int*));
for (unsigned int k = 0; k < n; k++) {
array[k] = malloc(m * sizeof(int));
}
//Deallocate the memory
void DeallocateMemory(int** array, int n) {
for (int i = 0; i < n; i++){
free(array[i]);
}
}
答案 2 :(得分:0)
当您使用指针数组的指针时,您可以像问题一样free
内存。我的意思是,如果你分配内存并构建这样的二维数组。
int **array = malloc(m * sizeof(int *));
for (i = 0; i < m; i++) {
array[i]=malloc(n * sizeof(int));
}
然后你可以释放所有分配的内存。
for (i = 0; i < m; i++) {
free(array[i]);
}
free(array);
最后,你使用了一维数组,你可以像其他答案一样释放分配的内存。