malloc sizeof C中的typedef结构

时间:2014-08-09 08:19:45

标签: c struct malloc typedef

我有一个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 *'

3 个答案:

答案 0 :(得分:8)

C ++会出现此错误,因此您可能正在使用C ++编译器。

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

在C中,向malloc的返回值添加显式强制转换被视为错误形式。这是几乎所有C代码与C ++编译器不兼容的主要原因。最好的方法是考虑C和C ++不同的语言,并分别学习它们。

修改:See here至于为什么它被视为不良形式。

答案 1 :(得分:2)

您应该提供有关如何编译它的更多信息。 @PerJohansson为您提供了有用的提示。总而言之,这些可能是您的错误的修复:

  • 将行employeeRecord = malloc(sizeof(employee));更改为employeeRecord = (employee*)malloc(sizeof(employee));。 C ++需要malloc强制转换。人们从错误中扣除了你正在使用的C ++编译器。
  • 使用C编译器。

在我看来,将C和C ++视为一种单独的语言是件好事。因此,如果您的程序是C ++,请尝试使用new而不是malloc。并且始终记住free(如果使用malloc)或delete(如果使用new)您已分配的变量(您没有提供完整代码,所以我不知道您是否“这样做与否”。

答案 2 :(得分:1)

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

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