C语言中类型定义结构的malloc size



我有一个struct指针,我想动态分配内存。

struct employeeStructure {
  char name[100];
  char address[255];
  int age;
  char ssnum[100];
};
typedef struct employeeStructure employee;
  /* and in my main function */
employee *employeeRecord;
employeeRecord = malloc(sizeof(employee));
->>>
->>> error: assigning to 'employee *' (aka 'employeeStructure *') from incompatible type 'void *'
->>>

我得到了一个error: assigning to 'employee *' (aka 'employeeStructure *') from incompatible type 'void *'

c++会给出这个错误,所以你可能使用了c++编译器。

将设置更改为C,或根据c++要求添加显式强制转换(或切换到使用new/delete)。

在C语言中,对malloc的返回值添加显式强制转换被认为是不好的形式。这就是几乎所有C代码都与c++编译器不兼容的主要原因。最好的办法是把C和c++看作不同的语言,分别学习它们。

编辑:看这里为什么它被认为是不好的形式。

您应该提供有关如何编译它的更多信息。@PerJohansson已经给了你有用的提示。总而言之,以下是对错误的可能修复:

  • employeeRecord = malloc(sizeof(employee));改为employeeRecord = (employee*)malloc(sizeof(employee));。c++需要malloc强制转换。从你得到的错误中扣除你正在使用c++编译器。

在我看来,最好将C和c++视为独立的语言。所以,如果你的程序是c++的,试着用new代替malloc。并且始终记住free(如果使用malloc)或delete(如果使用new)您分配的变量(您没有提供完整的代码,所以我不知道您是否在这样做)。

这是因为malloc返回void *。您可能需要根据您的需求进行铸造。一般不需要强制转换每个malloc对象。但建议根据程序员的需要进行转换。下面的代码很有用:

employeeRecord = (employee *)malloc(sizeof(employee));

相关内容

  • 没有找到相关文章

最新更新