在释放内存之前转换为void *(C编程)

时间:2018-02-28 13:45:04

标签: c casting free void-pointers

我遇到了这段代码,并想知道为什么在释放之前它已被转换为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版本可能会发出警告,但总体来说这是不必要的。

1 个答案:

答案 0 :(得分:7)

那个演员在C中是无稽之谈。

可能是他们正在编译C ++编译器中的代码,在这种情况下需要强制转换。但是用C ++编译器编译C代码通常不是一个好主意。