C 为结构中的结构数组动态分配内存

C 为结构中的结构数组动态分配内存,c,arrays,struct,dynamically-generated,C,Arrays,Struct,Dynamically Generated,我有一个棘手的问题,试着用一个简短的例子来解释 我想要这样的结构: struct car_park{ int count_of_cars; struct car{ int count_of_seats; struct seat{ int size; int color; }seats[]; }cars[]; } 停车场里有很多车,每辆车都有不同数量的座位,每个座位都有不同的参数。汽车的最

我有一个棘手的问题,试着用一个简短的例子来解释

我想要这样的结构:

struct car_park{
   int count_of_cars;
   struct car{
       int  count_of_seats;
       struct seat{
           int size;
           int color; 
       }seats[];
   }cars[];
}

停车场里有很多车,每辆车都有不同数量的座位,每个座位都有不同的参数。汽车的最大数量是100,座椅的最大数量是6,但我不想使用汽车和座椅的数组。我想动态分配内存

和:我想在多个功能中使用它

void read_current_cars(struct car_park *mycars){
// read config file and allocate memory for the struct
...
}

void function_x(struct car_park *mycars){
//... use struct
}

void main(){
struct car_park my;

read_current_cars(&my);
function_x(&my);
}
我如何编程?我在网上搜索过,但找不到解决办法。我只找到了部分,但我猜不透


Andre

虽然允许将具有未指定长度的数组的结构作为最后一个成员,但此类结构不允许作为数组的成员

由于要为这些数组动态分配空间,请将
cars
seats
成员声明为指针:

struct seat {
    int size;
    int color; 
};

struct car {
    int count_of_seats;
    struct seat *seats;
};

struct car_park {
    int count_of_cars;
    struct car *cars;
};

您只需要使用malloc()分配内存,使用指针。“我想动态分配内存。”-->More detail request。这是像A)3辆车,每个2个座位还是B)3辆车,车[0]2个座位,车[1]4个座位,车[2]5个座位?@chux它是版本B)现在下一步是找到如何将有关车数(0到100)和各种座位数(0到6)的信息传递到程序中。数据的来源是什么?发布一些示例配置文件。它也适用于结构和分配。:-)谢谢很好的简化,虽然
cars
仍然可以是灵活的数组成员。啊。。。谢谢你能给我一个关于内存分配的提示吗?每辆车都有座位数。但是我不能在不知道座位数的情况下分配汽车阵列。。。还是不?我头上有个结…:-(@Andre当您分配
car
数组时,每个实例都包含一个指针的空间。然后,对于每个car,您为
seats
数组分配空间,并将该数组的起始地址分配给
seats
成员。C在哪里禁止数组的元素类型为具有灵活数组成员的结构y这样的事情不会达到OP的目的,但我在标准中找不到任何实际上不允许它的东西。@JohnBollinger我自己找不到它,但想法是你不能在有FAM的结构上做指针算术,因为它的大小不包括FAM。