我对C有这个问题。
我有以下声明。
int *a;
a=malloc(100);
我收到以下错误:
错误:从 'void*' 到 'int*' 的无效转换 [-fpermissive]
对此有任何提示吗?
您正在将代码编译为 C++,其中您使用的代码无效。但是,对于 C,它是有效的,您不应添加任何 cast。
但是请注意,to 的参数malloc()
在char
s 中,因此“100”有点随机。如果您想要 100 个整数,请执行以下操作:
a = malloc(100 * sizeof *a);
当在 C++ 中编写 C 兼容代码时,malloc
由于一些纯 C 库会用到它,所以你必须使用free
它,我建议编写一个快速类型化的 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);
它创建了一个大小为 100int
秒的缓冲区。
添加一些额外的东西,比如防止以这种方式使用非平凡的析构函数创建类(因为你期望它们是free
d 而不被破坏),也可能被推荐。
malloc
正在返回一个 void* 指针。
你应该做 :
a=(int*)malloc(100);
顺便说一句:此语句分配 100Bytes 而不是 100 个整数。LE:如果你用 gcc 编译,这不是必须的。如果你使用 g++ 编译,这是必须的。