Почему так выделять память под структуру неправильно? - C (СИ)

Узнай цену своей работы

Формулировка задачи:

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

Решение задачи: «Почему так выделять память под структуру неправильно?»

textual
Листинг программы
Simple new = (Simple) malloc(sizeof(*Simple));

Объяснение кода листинга программы

  1. Simple - это структура данных, которую мы хотим создать.
  2. new - это имя переменной, которая будет ссылаться на созданный нами объект структуры Simple.
  3. malloc - это функция, которая выделяет память в динамической памяти.
  4. sizeof(*Simple) - это выражение, которое вычисляет размер памяти, необходимый для хранения одного объекта структуры Simple.
  5. Simple - это указатель на структуру данных, которую мы хотим создать.
  6. new - это указатель на переменную, которая будет ссылаться на созданный нами объект структуры Simple.
  7. malloc - это функция, которая выделяет память в динамической памяти.
  8. sizeof(*Simple) - это выражение, которое вычисляет размер памяти, необходимый для хранения одного объекта структуры Simple.
  9. Simple - это структура данных, которую мы хотим создать.
  10. new - это имя переменной, которая будет ссылаться на созданный нами объект структуры Simple.
  11. Simple - это указатель на структуру данных, которую мы хотим создать.
  12. new - это указатель на переменную, которая будет ссылаться на созданный нами объект структуры Simple.
  13. Simple - это структура данных, которую мы хотим создать.
  14. new - это имя переменной, которая будет ссылаться на созданный нами объект структуры Simple.
  15. Simple - это указатель на структуру данных, которую мы хотим создать.
  16. new - это указатель на переменную, которая будет ссылаться на созданный нами объект структуры Simple.
  17. Simple - это структура данных, которую мы хотим создать.
  18. new - это имя переменной, которая будет ссылаться на созданный нами объект структуры Simple.
  19. Simple - это указатель на структуру данных, которую мы хотим создать.
  20. new - это указатель на переменную, которая будет ссылаться на созданный нами объект структуры Simple.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.8 из 5
Похожие ответы