带有C参数的free()语法

use*_*839 15 c malloc syntax free

我正在努力将许多C程序从Unix转换为Linux,这种free()语法引起了我的注意:

free((char *) area );
Run Code Online (Sandbox Code Playgroud)

这和之间有什么区别free( area );

Yu *_*Hao 17

签名free是:

void free(void *ptr);
Run Code Online (Sandbox Code Playgroud)

因此,如果areamalloc由其表兄弟返回的指针类型,则转换free((char *) area );是毫无意义的.

除非...如果代码真的,真的很旧,那就是在ANSI Cvoid *作为通用指针引入之前.在那个古老的时代,char *被用作通用指针.


Who*_*aig 15

如果有人在标准所批准的非指针类型中存储指向动态分配数据的指针,即被area 声明intptr_t为例如,则将非指针强制转换为指针类型并允许它被释放.

如果area已经是指针类型,那么在过去的四分之一世纪中编写的任何C代码都没有任何意义.