Немного контекста: Недавно я разработал универсальную функцию для обновления отображаемого изображения, основываясь только на том, какие его части изменились. Для этого я получаю в качестве параметра известную структуру, членами которой являются массивы символов (отображаемые строки), и сравниваю ее с отображаемой в данный момент информацией, чтобы обновить только необходимое, улучшив производительность. Это встроенная система для arm cortex-m0, если это имеет значение. Ниже приведен фрагмент кода кода для структуры.
struct displayLines {
char firstLine[13];
char secondLine[13];
char thirdLine[13];
char fourthLine[13];
char fivethLine[13];
char sixthLine[13];
};
typedef struct displayLines st_displayLines;
На основе этой структуры я использую указатель, инициализированный с адресом первого элемента, и оперирую им для доступа ко всем данным структуры (все строки). Ниже приведен фрагмент кода, показывающий, как я инициализирую указатель.
void updateScreen(st_displayLines st_toDisplay)
{
char *ptrtoUpdate = st_toDisplay.firstLine;
char *ptrDisplayed = st_currentlyDisplayed.firstLine;
//Here is the update code which consumes the pointers.
}
После работы с той же переменной указателя (с использованием арифметики над ней) и использования ее данных я просто возвращаюсь из функции, без вызова free операция над переменной-указателем.
Наконец, возникает вопрос:
Это утечка памяти? Или выделенная память для создания указателей будет освобождена, как только я выйду из области действия функции?
Если это утечка, будет ли она содержать 1 байт на каждую переменную указателя моей памяти каждый раз, когда я вызываю эту функцию? Таким образом, что (делая числа теперь), если у меня есть только 10 байтов доступной памяти, при 6-м вызове функции моя программа потерпит крах?