c/c++语言开发共享嵌套结构分配内存

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

      以上就是c/c++开发分享嵌套结构分配内存相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/541889.html

      (0)
      上一篇 2021年1月5日
      下一篇 2021年1月5日

      精彩推荐