Вы просто должны правильно использовать указатели. Скорее всего, вы забыли сделать «заказы» в качестве указателя. Дайте мне знать, если это решит вашу проблему:
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int count;
char type;
} *pizza;
typedef struct {
int courier;
int day;
pizza p;
} *order;
typedef struct {
order * orders; // order * orders -> create a pointer
int orderCount;
} *monthlyorders;
order new_order(int courier, int day, pizza p) {
order o = malloc(sizeof(order));
o->courier = courier;
o->day = day;
o->p = malloc(sizeof(pizza));
o->p = p;
return o;
}
pizza new_pizza(int count, char type) {
pizza pizza = malloc(sizeof(pizza));
pizza->count = count;
pizza->type = type;
return pizza;
}
monthlyorders add_order(monthlyorders m, order o) {
*(m->orders + m->orderCount) = o;
m->orderCount++;
return m;
}
monthlyorders new_monthlyorders(order o) {
monthlyorders m = malloc(sizeof(monthlyorders));
m->orders = malloc(1000); // You might need more cases (eg. 10000? )
m->orderCount = 0;
return add_order(m,o);
}
int main() {
pizza p = new_pizza(2, 'A');
order o = new_order(1, 1, p);
monthlyorders m = new_monthlyorders(o);
// Test cases
order o2 = new_order(2, 1, p);
add_order(m, o2);
// You might want to print out data from your object rather than the object itself
printf("%i\n", (*(m->orders))->courier);
printf("%i\n", (*(m->orders))->day);
printf("%i\n", (*(m->orders + 1))->courier);
printf("%i\n", (*(m->orders + 1))->day);
// Don't forget to free it
free(m->orders);
return 0;
}
РЕДАКТИРОВАТЬ: Подумайте о том, чтобы сделать то, что сказал Ян: замените
order o = malloc(sizeof(order));
на
order o = malloc(sizeof(*o));
и аналогично для другие звонки c