Object* thisBall = myGs->myBalls[index];
float thisLeft = thisBall.position.x;
// ^
Это не может скомпилироваться.thisBall
- это указатель, а не структура (или объединение).Вам нужно thisBall->position
.
Тем не менее, каждый malloc
должен быть в паре с free
.Ваш код ничего не делает malloc
, поэтому нет необходимости также вызывать free
.
У меня сложилось впечатление, что им не нужен метод free (), поскольку я нехочу удалить данные, на которые они указывают.
Это правильно.
Установка указателей на NULL
(или любое другое значение) не оказывает прямого влияния на управление памятью.В частности, он не освободит память.
Также бессмысленно устанавливать переменные непосредственно перед тем, как они выйдут из области видимости.Например:
{
Object *thisBall = myGs->myBalls[index];
doStuffWith(thisBall);
// ...
thisBall = NULL;
}
Компилятор, скорее всего, просто оптимизирует thisBall = NULL
, потому что это "мертвая запись": thisBall
не используется после этой строки (и его нельзя использовать, поскольку его время жизнизаканчивается на }
), поэтому нет необходимости устанавливать его на что-либо.