[英]nested structures allocating memory
gcc c89
我在这一行得到一个堆栈转储:
strcpy(comp->persons->name, "Joe");
但是,我已经分配了内存,所以不确定为什么我会得到它。 我在这里错过了什么吗?
非常感谢任何建议,
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
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;
}
您需要为persons
分配内存:
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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.