繁体   English   中英

嵌套结构分配内存

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM