Почему так выделять память под структуру неправильно? - C (СИ)
Формулировка задачи:
Допустим, надо выделить память под структуру, не пользуясь именем структуры. Я давно уже делаю так, ибо удобно:
Все компилируется и работает. Однако мне сказали, что так нельзя, потому что Simple - это тип. Почему же компилятор (TinyCC) это проглотил без единого ворнинга? Я полагал, что typedef делает как бы синоним типа. То есть Simple == (struct simple *), соответственно *Simple == struct simple. Более того, внешне все работает именно так. Я использую юнит-тесты, все ОК. Может, это какое-то нестандартное расширение TinyCC? Меня уверяют, что можно только так:
typedef struct simple {
int x;
int y;
} *Simple;
Simple new = (Simple) malloc(sizeof(*Simple));Simple new = (Simple) malloc(sizeof(*new));
Решение задачи: «Почему так выделять память под структуру неправильно?»
textual
Листинг программы
Simple new = (Simple) malloc(sizeof(*Simple));
Объяснение кода листинга программы
Simple- это структура данных, которую мы хотим создать.new- это имя переменной, которая будет ссылаться на созданный нами объект структурыSimple.malloc- это функция, которая выделяет память в динамической памяти.sizeof(*Simple)- это выражение, которое вычисляет размер памяти, необходимый для хранения одного объекта структурыSimple.Simple- это указатель на структуру данных, которую мы хотим создать.new- это указатель на переменную, которая будет ссылаться на созданный нами объект структурыSimple.malloc- это функция, которая выделяет память в динамической памяти.sizeof(*Simple)- это выражение, которое вычисляет размер памяти, необходимый для хранения одного объекта структурыSimple.Simple- это структура данных, которую мы хотим создать.new- это имя переменной, которая будет ссылаться на созданный нами объект структурыSimple.Simple- это указатель на структуру данных, которую мы хотим создать.new- это указатель на переменную, которая будет ссылаться на созданный нами объект структурыSimple.Simple- это структура данных, которую мы хотим создать.new- это имя переменной, которая будет ссылаться на созданный нами объект структурыSimple.Simple- это указатель на структуру данных, которую мы хотим создать.new- это указатель на переменную, которая будет ссылаться на созданный нами объект структурыSimple.Simple- это структура данных, которую мы хотим создать.new- это имя переменной, которая будет ссылаться на созданный нами объект структурыSimple.Simple- это указатель на структуру данных, которую мы хотим создать.new- это указатель на переменную, которая будет ссылаться на созданный нами объект структурыSimple.