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;
}
答案 0 :(得分:6)
您需要为persons
分配内存:
comp->persons = malloc( sizeof( struct emp ) * NumberOfPersonsYouExpectToHave );
并且不要忘记以后释放那个记忆。
答案 1 :(得分:2)
您已为公司结构分配了内存,但没有为emp结构
您必须为comp->person
分配内存:comp->person = (struct emp*)malloc(sizeof(emp))
之后您可以访问存储在comp-&gt; person
中的内存答案 2 :(得分:2)
内存未分配给struct company结构的“person”字段。如果你为此分配内存应该没问题。
答案 3 :(得分:0)
在这里,你没有为结构成员'人'分配任何内存。
我修改了你的代码:
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;
}