-
Notifications
You must be signed in to change notification settings - Fork 9
6.1 pony_free
danniknikolaev edited this page Jun 14, 2019
·
1 revision
pony_free() - функция для освобождения выделенной в pony.c памяти.
Стандарт функции:
void pony_free()
{
// освобождение памяти на шине данных, лежащей в pony
free(pony.cfg);
free(pony.plugins);
}
Освобождение памяти происходит поэтапно, аналогично pony_init. Сначала под вложенные части, потом - под внешние.
Шаблон:
if (указатель на первую часть != NULL)
{
освобождение памяти под то, что лежит в этой части
if (указатель на вторую часть != NULL)
{
освобождение памяти под то, что лежит в этой части
free(указатель на вторую часть); //освобождение памяти под вторую часть
}
free(указатель на первую часть); //освобождение памяти под первую часть
}
Вложенных частей может быть бесконечно много.
Если память под определенную часть могла не выделиться в pony_init (но если выделяется, то выделяется именно там), то следует проверить указатель на равенство NULL.
Пример:
if (pony.bus.gnss != NULL)
{
if (pony.bus.gnss->gps != NULL)
{
if (pony.bus.gnss->gps->sat != NULL)
{
for (i = 0; i < pony.bus.gnss->gps->max_sat_num; i++)
if (pony.bus.gnss->gps->sat[i].eph != NULL)
free(pony.bus.gnss->gps->sat[i].eph);
free(pony.bus.gnss->gps->sat);
}
free(pony.bus.gnss->gps);
}
free(pony.bus.gnss);
}