分配给指针的马洛克

malloc assigned to pointer

本文关键字:洛克 马洛克 指针 分配      更新时间:2023-10-16

我对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++ 编译,这是必须的。