嵌套结构分配内存
gcc c89
我在这一行得到一个堆栈转储:
strcpy(comp->persons->name, "Joe");
但是,我已经分配了内存,所以不确定为什么我会得到它。 我在这里错过了什么吗?
非常感谢任何建议,
#include #include #include struct company { struct emp *persons; char company_name[32]; }; struct emp { char name[32]; char position[32]; }; int main(void) { struct company *comp; comp = malloc(sizeof *comp); memset(comp, 0, sizeof *comp); strcpy(comp->persons->name, "Joe"); strcpy(comp->persons->position, "Software Engineer"); printf("Company = [ %s ]\n", comp->company_name); printf("Name ==== [ %s ]\n", comp->persons->name); printf("Postion ==== [ %s ]\n", comp->persons->position); free(comp); return 0; }
你需要为人分配内存:
comp->persons = malloc( sizeof( struct emp ) * NumberOfPersonsYouExpectToHave );
并且不要忘记以后释放那个记忆。
您已为公司结构分配了内存,但没有为emp结构
你必须为comp->person
分配内存: comp->person = (struct emp*)malloc(sizeof(emp))
之后您可以访问存储在comp-> person中的内存
内存不分配给结构公司结构的“人员”字段。 如果你为此分配内存应该没问题。
在这里,您没有为结构成员“人员”分配任何内存。
我修改了你的代码:
struct { struct emp *persons; char company_name[32]; } company; struct emp { char name[32]; char position[32]; }; int main() { int num_persons = 1; company.persons = malloc(sizeof(struct emp)*num_persons); if (NULL == company.persons) { printf ("\nMemory Allocation Error !\n"); return 1; } strcpy(company.persons->name, "Joe"); strcpy(company.persons->position, "Software Engineer"); strcpy(company.company_name, "My_Company"); printf("Company = [ %s ]\n", company.company_name); printf("Name ==== [ %s ]\n", company.persons->name); printf("Postion ==== [ %s ]\n", company.persons->position); return 0; }