![](/img/trans.png)
[英]Are “malloc(sizeof(struct a *))” and “malloc(sizeof(struct a))” the same?
[英]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 ++,请尝试使用new
而不是malloc
。 并始终记得free
(如果使用malloc)或delete
(如果使用new)已分配的变量(您没有提供完整的代码,所以我不知道您是否正在这样做)。
这是因为malloc返回void *。 您可能需要按照您的要求进行转换。 通常不需要强制转换每个malloc对象。 但是建议根据程序员的需要进行转换。 该代码可能会有所帮助:
employeeRecord =(employee *)malloc(sizeof(employee));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.