我遇到了这段代码,并想知道为什么在释放之前它已被转换为void *
?
free((void *)array1[i]);
我在一些文章中看过free
没有使用,所以我想知道为什么在释放内存时会强制转换为void *
?
以下是他们分配和释放内存的方式:
#include <stdlib.h>
int **array1 = malloc(nrows * sizeof(int *));
for(i = 0; i < nrows; i++)
array1[i] = malloc(ncolumns * sizeof(int));
for(i = 0; i < nrows; i++)
free((void *)array1[i]);
free((void *)array1);
参考this,某些gcc版本可能会发出警告,但总体来说这是不必要的。
答案 0 :(得分:7)
那个演员在C中是无稽之谈。
可能是他们正在编译C ++编译器中的代码,在这种情况下需要强制转换。但是用C ++编译器编译C代码通常不是一个好主意。