【问题标题】:Visual Studio 2019 getting error C2440 with typedef data typeVisual Studio 2019 出现 typedef 数据类型的错误 C2440
【发布时间】:2021-01-08 16:24:43
【问题描述】:

我遇到了这个问题,不知道如何解决:

那个错误:

error C2440: '=': cannot convert from 'void *' to 'node_t'

代码是:

node_t* arr = malloc(sizeof(node_t) * temp3);
    for (int i = 0; i < temp3; i++)
        arr[i] = NULL;

谢谢。

【问题讨论】:

  • 分配arr[i] = NULL; 似乎无效。将其替换为 node_t 的正确初始化(可能是一个结构?)请注意,多个语句应包含在 {} 中以将它们用作循环体。
  • 请更新您的问题以指明错误消息所指的行。它提到了一个'=' 运算符,但您的代码中有三个。

标签: c visual-studio compiler-errors dynamic-memory-allocation


【解决方案1】:

arr[i] 的类型是 node_t,它不是指针类型(我从错误消息中猜到了这一点)。

这段代码重现了这个问题:

#include <stdio.h>
#include <stdlib.h>

typedef struct
{
  int a, b;
} node_t;


int main() {
  node_t* arr = malloc(sizeof(node_t) * 10);
  for (int i = 0; i < 10; i++)
    arr[i] = NULL;    
}

你可能需要这样的东西:

void initialize_node(node_t *node)
{
  // adapt this to your actual node_t type
  node->a = 0;
  node->b = 0;
}

int main() {
  node_t* arr = malloc(sizeof(node_t) * 10);
  for (int i = 0; i < 10; i++)
    initialize_node(&arr[i]);
}

【讨论】:

    【解决方案2】:

    NULL 只能分配给指针,但通过 'arr[i] = NULL',您实际上是取消引用指针并将 NULL 分配给结构 node_t。这就是你得到错误的原因。

    取消引用指针意味着获取存储在内存中的值 指针指向的位置。

    arr[i] 与 *(arr+i) 相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-14
      • 2019-08-31
      • 2021-02-24
      • 2021-09-02
      相关资源
      最近更新 更多