我对C有这个问题。
我有以下声明。
int *a;
a=malloc(100);
我收到以下错误:
错误:从"void*"到"int*"的转换无效 [-允许]
对此有什么提示吗?
您正在将代码编译为 C++,其中您使用的代码无效。但是,对于 C,它是有效的,您不应该添加任何强制转换。
但是请注意,malloc()
的参数以 char
s 为单位,因此"100"有点随机。如果你想要 100 个整数,请执行以下操作:
a = malloc(100 * sizeof *a);
在C++编写 C 兼容代码时,由于某些纯 C 库将free
它,您必须使用 malloc
,我建议编写一个快速键入的 malloc:
template<typename T>
T* typed_malloc( size_t count = 1 ) {
return reinterpret_cast<T*>( malloc(sizeof(T)*count) );
}
然后像这样使用:
int *a;
a=typed_malloc<int>(100);
这将创建一个大小为 100 int
秒的缓冲区。
添加一些额外的东西,比如防止以这种方式创建具有非平凡析构函数的类(正如您希望它们在不被销毁的情况下free
的那样),也可能被推荐。
malloc
返回一个 void* 指针。
你应该做:
a=(int*)malloc(100);
顺便说一句:此语句分配的是 100Bytes 而不是 100 个整数。LE:如果你用gcc编译,这不是必需的。如果你使用 g++ 编译,这是必须的。