> -- Евгений Темиргалеев писал(а):
> Давайте теперь на КП. И реализацию на Си поправьте, там утечка памяти.

Так то да, но программа быстро отработала, а windows память освободил.

## Код:
```
i = table;
  while (i != NULL) {
    i = table->next;
    free(table);
    table = i;
  }
```


В этом преимущество сборщика мусора.

> -- Евгений Темиргалеев писал(а):
> 1) Касательно return в середине button_find_pos рекомендую посмотреть 11 страницу в . Есть и более общий материал на тему правильного написания циклов --- м.б. тов. Ермаков даст ссылку.

Не хотелось бы начинать холивар. Но ведь это частность. Сам алгоритм правилен, отрабатывает как надо. Цель же в этом?

Если по правилам то так
## Код:
```
button_t * button_find_pos(int x, int y)
{
  button_t * p = table;

  while (p != NULL) && (point_in_rect(x, y, p->pos_x, p->pos_y, p->size_w, p->size_h) != true)
  {
    p = p->next;
  }

  return p;
}
```


В любом случае если p не найден, он будет NULL - что оповещает об отсутствии объекта в данных координатах.