我有一个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));