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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在释放内存之前转换为void *(C编程)[重复]相关的知识,希望对你有一定的参考价值。

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

我遇到了这段代码,并想知道为什么在释放之前它已被转换为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中是胡说八道。

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

以上是关于在释放内存之前转换为void *(C编程)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C ++中的内存泄漏示例(通过使用异常)[重复]

在 C 或 C++ 中释放内存 [重复]

动态内存分配如何工作[重复]

在C语言进行编程中,为啥要释放旧内存?

删除/释放由 malloc 分配并由 new [重复] 重用的内存

释放堆内存后将指针设置为 NULL [重复]