Dev-C++中使用malloc函数提示void转float无效转换错误如何解决
报错原因
该错误由编译规则与代码语法不匹配触发:
- Dev-C会根据源文件后缀选择编译模式:后缀为
.cpp时默认使用C语法规则编译,后缀为.c时使用C语法规则编译。 malloc函数返回值类型为void*(无类型指针):C语法允许void*隐式转换为任意其他类型指针,因此float *p=malloc(sizeof(float));是合法C代码;但C++语法禁止void*隐式转换为其他类型指针,必须显式声明类型转换,否则就会触发编译报错。- 弹出的提示
Invalid conversion from 'void' to 'float'属于文本截断问题,实际报错指向void*到float*的非法隐式转换,并非基础类型void到float的转换。
解决方案
根据实际开发的语言选择对应处理方式即可:
- 编写C语言代码时:直接将源文件后缀从
.cpp改为.c,Dev-C++会自动切换为C编译器,原有代码无需修改即可正常编译。 - 编写C++代码时:对
malloc返回值做显式强制类型转换,修改后代码如下:
float *p = (float*)malloc(sizeof(float));
补充:C++场景下优先使用new申请堆内存,写法为float *p = new float;,无需手动做类型转换,对应释放内存使用delete即可,注意不要和malloc/free交叉混用。
内容的提问来源于stack exchange,提问作者salma
相关产品推荐
相关产品推荐

