Создание/удаление глобального массива вне основной функции.
- Войдите на сайт для отправки комментариев
Сб, 18/11/2017 - 16:34
Всем привет!
Подскажите, как можно в обычной функции создать глобальный массив, а потом из другой функции его удалить?
В loop() и setup() я ничего не инициализирую. Эта задача решает вопрос освобождения памяти в куче.
void findDevices() { String * ipList = new String [100]; // Создаю массив на 100 строк }
void udpScanStop() { delete [] ipList; // удаляю массив, созданный в findDevices() ipList = nullptr; }
Я не хочу создавать массив в глобальном пространстве, так как он там не нужен, а память будет зарезервирована. Я хочу создать массив, поработать с ним и освободить память, но из другой функции.
Если создавать глобально, то чистил его так:
Но я так понимаю, что память все равно не освобождена и будет мертвым грузом зарезервирована. А мне эти данные нужны только по запросу, причем они будут меняться от запроса к запросу. В другой функции происходит наполнение этого массива.
Создаете класс Массив и все у вас замечательно работает.
Подскажите, как можно в обычной функции создать глобальный массив, а потом из другой функции его удалить?
Это порочная практика. Вам нужно точно быть уверенным, что после резервирования памяти под массив, у вас не будет создана еще одна такая же глобальная "резервация". Иначе от того, что вы освободите потом где-то еще, памяти у вас может особо не добавится - в МК нет сборщика мусора, который будет заботиться о том, чтобы все дырки в RAM собирались в одну большую область. Поэтому вам нужно очень крепко продумать алгоритм резервирования и высвобождения, либо не освобождать память вовсе, а использовать ее повторно. Но лучше не переносить приемы работы с памятью ПК на МК, пока вы не начнете с легкостью внутри своей головы компилировать написанный код. В ином случае вы придете сюда и будете спрашивать почему ваше устройство вешается то через день, то неделю работает нормально.