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

标签 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 版本可能会发出警告,但总体而言是不必要的。

最佳答案

C 中的强制转换是无稽之谈。

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

关于在释放内存之前转换为 void *(C 编程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49031032/

相关文章:

c - 编写一个二进制搜索方法,在数组中找到一个单词时努力返回 1(真)。 [家庭作业}

c - : operator in C

c - 将 .txt 中的单词转换为 C 中的数组

java - 是否可以对 List 进行超投?

c# - C# 中的转换和性能

c - 销毁进程树并释放它分配的所有内存-Linux-C

c - atoi 值的差异

c# - Bitwise-or 似乎隐式转换为 long。这可以避免吗?

c++ - C 等同于 C++ delete[] (char *)

c - 如何在 main 中返回指针到指针的指针?