繁体   English   中英

C中的typedef结构的malloc sizeof

[英]malloc sizeof a typedef struct in C

我有一个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 ++视为独立的语言。 因此,如果您的程序是C ++,请尝试使用new而不是malloc 并始终记得free (如果使用malloc)或delete (如果使用new)已分配的变量(您没有提供完整的代码,所以我不知道您是否正在这样做)。

这是因为malloc返回void *。 您可能需要按照您的要求进行转换。 通常不需要强制转换每个malloc对象。 但是建议根据程序员的需要进行转换。 该代码可能会有所帮助:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM