Создание/удаление глобального массива вне основной функции.

mcmega
Offline
Зарегистрирован: 12.02.2014

Всем привет!

Подскажите, как можно в обычной функции создать глобальный массив, а потом из другой функции его удалить?

В loop() и setup() я ничего не инициализирую. Эта задача решает вопрос освобождения памяти в куче.

void findDevices() {
  String * ipList = new String [100];  // Создаю массив на 100 строк
}
void udpScanStop() {
  delete [] ipList;  // удаляю массив, созданный в findDevices()
  ipList = nullptr;
}

Я не хочу создавать массив в глобальном пространстве, так как он там не нужен, а память будет зарезервирована. Я хочу создать массив, поработать с ним и освободить память, но из другой функции.

 

mcmega
Offline
Зарегистрирован: 12.02.2014

Если создавать глобально, то чистил его так:

void udpScanStop() {
  for (int i = 0; i < 100; i++)  // Чистим список IP адресов устройств
    ipList[i] = "";
}

Но я так понимаю, что память все равно не освобождена и будет мертвым грузом зарезервирована. А мне эти данные нужны только по запросу, причем они будут меняться от запроса к запросу. В другой функции происходит наполнение этого массива.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Создаете  класс Массив и все у вас замечательно работает.

sadman41
Offline
Зарегистрирован: 19.10.2016

mcmega пишет:

Подскажите, как можно в обычной функции создать глобальный массив, а потом из другой функции его удалить?

Это порочная практика. Вам нужно точно быть уверенным, что после резервирования памяти под массив, у вас не будет создана еще одна такая же глобальная "резервация". Иначе от того, что вы освободите потом где-то еще, памяти у вас может особо не добавится - в МК нет сборщика мусора, который будет заботиться о том, чтобы все дырки в RAM собирались в одну большую область. Поэтому вам нужно очень крепко продумать алгоритм резервирования и высвобождения, либо не освобождать память вовсе, а использовать ее повторно. Но лучше не переносить приемы работы с памятью ПК на МК, пока вы не начнете с легкостью внутри своей головы компилировать написанный код. В ином случае вы придете сюда и будете спрашивать почему ваше устройство вешается то через день, то неделю работает нормально.