【问题标题】:a value of type "void" cannot be used to initialize an entity of type "double**"“void”类型的值不能用于初始化“double**”类型的实体
【发布时间】:2021-05-08 01:01:53
【问题描述】:

我使用 C 语言,但 malloc 有问题


  double** matrix = malloc(matrixSize * sizeof(double*));

  for (size_t i = 0; i < matrixSize; i++) {
    matrix[i] = malloc(matrixSize * sizeof(double));
  }

  return matrix;
}`

【问题讨论】:

  • 这是完整的信息吗?你是用 C 模式编译的吗?
  • 我在 MallocMatrix 函数中编写代码:为矩阵分配动态内存。首先,它分配给指向字符串的指针数组,然后分配内存给一维数组,它们是字符串矩阵的字符串。我有错误:“void”类型的值不能用于初始化“double**”类型的实体
  • 无论好坏,您的编译器都可能将 C++ 规则应用于您的 C 代码。它可能说“不能使用void * 类型的值”(指针而不是普通的void;没有void 类型的值)。

标签: c visual-studio-2010 malloc


【解决方案1】:

malloc 返回一个空指针

void *ma​​lloc(size_t size);

因此您必须将其类型转换为 double**

double** matrix = (double**)malloc(matrixSize * sizeof(double*));

【讨论】:

  • 请注意,真正的 C 编译器不需要强制转换,但 C++ 编译器需要。
  • 我按照你说的修复了,但现在我遇到了 matrix[i] = malloc(matrixSize * sizeof(double)); 的问题它说“void*”类型的值不能用于初始化“double*”类型的实体
  • 同样的事情,您必须将类型转换为 double*。矩阵[i] = (double*)malloc(matrixSize * sizeof(double));
  • 您似乎正在根据遇到的错误将其编译为 C++ 代码。您能否确认这是 C 代码、.c 文件,并且正在编译为 as C?
猜你喜欢
  • 2016-05-17
  • 2019-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-24
相关资源
最近更新 更多