-1

我对C有这个问题。

我有以下声明。

int *a;
a=malloc(100);

我收到以下错误:

错误:从 'void*' 到 'int*' 的无效转换 [-fpermissive]

对此有任何提示吗?

4

3 回答 3

11

您正在将代码编译为 C++,其中您使用的代码无效。但是,对于 C,它是有效的,您不应添加任何 cast

但是请注意,to 的参数malloc()chars 中,因此“100”有点随机。如果您想要 100 个整数,请执行以下操作:

a = malloc(100 * sizeof *a);
于 2012-12-12T15:50:56.880 回答
0

当在 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秒的缓冲区。

添加一些额外的东西,比如防止以这种方式使用非平凡的析构函数创建类(因为你期望它们是freed 而不被破坏),也可能被推荐。

于 2012-12-12T16:05:16.343 回答
-4

malloc正在返回一个 void* 指针。

你应该做 :

a=(int*)malloc(100);

顺便说一句:此语句分配 100Bytes 而不是 100 个整数。LE:如果你用 gcc 编译,这不是必须的。如果你使用 g++ 编译,这是必须的。

于 2012-12-12T15:47:59.023 回答