嵌套结构分配内存

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; }