c中的二维动态数组-访问分配的变量

问题描述 投票:0回答:1

我正在(再次..)正在努力进行C编码项目。

[请帮助我了解如何通过也动态分配的2D数组访问动态分配的变量。每次尝试都以失败告终,我找不到正确的语法...

[尝试:在分配给** list的新Family中将字符串放入family_name指针中。

scanf(" %s",&lod->list[0]->family_name);

程序:

#define _CRT_SECURE_NO_WARNINGS
//Libraries
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//Consts, globals, structs 

#define MAX 10000

typedef struct person
{
    char *name;
    int gender;         //1-female, 0-male
} Person;

typedef struct family
{
    char *family_name;
    Person *mother, *father;    // parents' names
    Person **children_list; // list of the children in this family
    unsigned child_list_size;   // size of child_list array
    unsigned current_listChild_size;
} Family;

typedef struct listFamilys
{
    Family **list;
    unsigned current_listFamily_size;   // current size of family
}
ListFamilys;

//main
void main()
{
    ListFamilys *lod = (ListFamilys*) malloc(sizeof(ListFamilys));
        if(! lod) exit(0);
        lod->current_listFamily_size =0;
    lod->list = (Family**)malloc(sizeof(Family*));
    if (!lod->list) exit(0);
    printf("Enter family name: ");
    **scanf(" %s",&lod->list[0]->family_name);**
    system("pause");
}

c pointers dynamic syntax
1个回答
0
投票
lod->list = (Family**) malloc(sizeof(Family*)); lod->list[0] = (Family*) malloc(sizeof(Family)); lod->list[0]->family_name = (char*) calloc(11, 1);

您只在其中做第一行的地方。我在这里对calloc的用法有些随意,限制为10个字符。您可以根据需要进行修改。

但是,虽然这是启动和运行单个元素的最简单方法,但是由于必须进行多少分配,这种方法在大范围内崩溃了,并且由于要进行多少个单独的分配,释放内存成为噩梦使用这种方法。因此,最好将名称的4kb空间分配给单独的指针,然后将人员和家庭的名称字段指向相关名称,而不是为每个名称分别分配。其余部分如此。本质上,请尝试提取分配,而不要像上面的代码那样逐个字段地向下分配。
© www.soinside.com 2019 - 2024. All rights reserved.