c - malloc 不转换为结构

标签 c struct type-conversion malloc declaration

我有以下简单代码:

结构的第一次使用,f 工作正常,但我无法为 n 进行 malloc - 我收到错误,指出它 void* 无法分配到我的值(value)观*。我知道我不应该使用 malloc,那么我该怎么做呢?怎么了?

具体错误:

“void *”类型的值不能分配给时间“myValues *”的实体

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

typedef struct values
{
int a;
char c;
void *pv;
values *next;
} myValues;

int main(){
    myValues f;
    myValues *n = malloc(sizeof(myValues));
}

最佳答案

很明显该程序被编译为C++程序。否则,编译器将发出错误,指出未为结构定义声明名称 values

typedef struct values
{
int a;
char c;
void *pv;
values *next;
^^^^^^ 
} myValues;

如果是这样,你必须写

myValues *n = ( myValues * )malloc(sizeof(myValues));

因为void *类型的指针不能隐式转换为其他类型的指针。

(或者您需要将程序完全重写为 C++ 程序,例如用函数 malloc 的调用来代替运算符 new 的使用。)

或者您应该将该程序编译为 C 程序。在这种情况下你必须写

typedef struct values
{
int a;
char c;
void *pv;
struct values *next;
^^^^^^^^^^^^^ 
} myValues;

关于c - malloc 不转换为结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42615961/

相关文章:

从 C 调用 Mips

c - 星号在 Objective-C 中的使用

c - 如何最大限度地提高此 C 代码的性能?

C - read() 是否添加 '\0' ?

c++ - 结构数组在调用时打印零,但在未调用时显示正确的输入(短代码)

c++ - 使用模板删除/添加结构成员

c - 从不同函数使用的结构指针

c# - 从 C# 应用程序执行 C++ 函数

C++双指针数组到 float 的转换

java - 方法调用中的 Null、原始数据值和包装类