我有一个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 *'
。
答案 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 ++,请尝试使用new
而不是malloc
。并且始终记住free
(如果使用malloc)或delete
(如果使用new)您已分配的变量(您没有提供完整代码,所以我不知道您是否“这样做与否”。
答案 2 :(得分:1)
这是因为malloc返回void *。您可能需要根据您的要求进行投射。通常不需要转换每个malloc对象。但建议按照程序员的需要进行投射。这段代码很有帮助:
employeeRecord =(employee *)malloc(sizeof(employee));