嵌套结构分配内存

时间:2010-02-17 07:16:47

标签: c

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

4 个答案:

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