【问题标题】:malloc assigned to pointer [closed]malloc 分配给指针
【发布时间】:2023-03-10 04:12:01
【问题描述】:

我遇到了 C 的这个问题。

我有以下声明。

int *a;
a=malloc(100);

我收到以下错误:

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

对此有何提示?

【问题讨论】:

  • 这是 C 中的合法转换。您确定您没有使用 C++ 编译器进行编译吗?
  • 我非常有信心这是 C++ - 特别是 -fpermissive 是 C++ 的 gcc 选项,而不是 C。
  • 不清楚问题到底是什么(希望关闭编译器或修复编程错误)?无论如何,这太基本了,无法回答。

标签: c++ c pointers malloc


【解决方案1】:

您正在将代码编译为 C++,其中您使用的代码无效。不过对于 C,它是有效的,你 should not add any cast

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

a = malloc(100 * sizeof *a);

【讨论】:

  • 你说得对,我是用 C++ 编译的。谢谢!
【解决方案2】:

在 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);

创建一个大小为 100 ints 的缓冲区。

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

【讨论】:

    【解决方案3】:

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

    你应该这样做:

    a=(int*)malloc(100);
    

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-10
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    • 2014-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多