gpt4 book ai didi

c - int 指针类型转换失败

转载 作者:太空宇宙 更新时间:2023-11-04 05:49:47 24 4
gpt4 key购买 nike

此代码在 MSVC 编译器和 gcc (MinGW) 上均无法编译。

#include <stdlib.h>
int main() {
int *a = malloc(sizeof(int));
free(a);
return 0;
}

编译错误为

Error C2440 'initializing': cannot convert from 'void *' to 'int *'

当然,把分配行改成

int *a = (int*) malloc(sizeof(int));

使编译成为可能。 为什么需要显式类型转换?当我分配其他类型的数据(如 struct 或 )时,这种方法没有问题。

最佳答案

您使用的是C++编译器,可能是使用了错误的扩展名(.cpp)

int *a = malloc(sizeof(int));

在 C 中有效。存在从任何对象指针类型到 void * 的隐式转换。

在 C++ 中它是无效的(因为它的类型比 C 强),没有这样的隐式转换,你需要一个转换:

int *a = (int*)malloc(sizeof(int));
int *a = static_cast<int*>(malloc(sizeof(int));

如果您使用的是 C++,则可以/应该使用 newdelete 运算符。

int *a = new int();
delete a;

关于c - int 指针类型转换失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45801183/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com