Уч;здесь есть ряд проблем.
extern void *malloc(unsigned int);
Не делайте этого;используйте #include <stdlib.h>
, потому что это будет правильно, а то, что вы написали, обычно неверно (аргумент malloc()
- это size_t
, что необязательно unsigned int
; это может быть unsigned long
или какой-то другой тип).
struct Box {
int x, y ,w, h;
};
Помимо случайного пробела, struct Box
в порядке.
struct Wall {
char color[15];
struct Box *boxes[20];
};
И struct Wall
в порядке.
int main(int argc, const char *argv[])
Вы не '• используя argc
или argv
, поэтому вам лучше использовать альтернативное объявление:
int main(void)
Исходный код еще раз:
{
struct Wall *mywall = malloc(sizeof(struct Wall));
Это выделяет, но не инициализируетодин struct Wall
.Само по себе это нормально, хотя вы должны проверить, что распределение прошло успешно, прежде чем использовать его.Вам также нужно беспокоиться о выделении struct Box
элементов, на которые будут указывать элементы массива.
struct Box *myboxes[] = mywall->boxes;
У вас здесь небольшая катастрофа.Вы не можете копировать такие массивы.Вы не проверили, что у вас есть массив.Игнорируя проверку ошибок, вы застряли с одним из:
struct Box *myboxes[] = { &mywall->boxes[0], &mywall->boxes[1], ... };
или:
struct Box **myboxes = &mywall->boxes;
Я не уверен, что вам понадобится вторая версия, хотя она короче.
return 0;
Мне нравится видеть return 0;
в конце main()
, хотя C99 позволяет вам его опустить.
}