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

问题描述 投票:1回答:1

这个问题在这里已有答案:

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

c casting free void-pointers
1个回答
7
投票

那个演员在C中是胡说八道。

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

© www.soinside.com 2019 - 2024. All rights reserved.