6.1 pony_free - p-o-n-y/pony GitHub Wiki

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);

}