Строковый массив не освобожден при выходе из области видимости

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

Я знаю, что в старой реализации String TextString не было деструктора, но в текущей реализации, похоже, он есть.

Я использую эту библиотеку MemoryFree ( Обратите внимание, что этот связанный код теперь исправлен на основе принятого ответа на этот вопрос ).

В коде исследуются два сценария: распределение массива символов и массива строк в двух разных функциях для принудительного выхода из области видимости на обоих.

#include 

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  int freeBefore, freeAfter;

  //TEST ALLOCATION OF CHAR ARRAY//
  freeBefore = freeMemory();
  AllocateCharArr();
  freeAfter = freeMemory();
  Serial.println("CHAR*: Before " + String(freeBefore)
    + ", After " + String(freeAfter)
    + ", Diff " + String(freeBefore - freeAfter));

  //TEST ALLOCATION OF STRING//
  freeBefore = freeMemory();
  AllocateStringArr();
  freeAfter = freeMemory();
  Serial.println("STRING: Before " + String(freeBefore)
    + ", After " + String(freeAfter)
    + ", Diff " + String(freeBefore - freeAfter));
}

void AllocateCharArr() {
  char s[100];
}

void AllocateStringArr() {
  String s[100];
}

void loop() { /* empty */ }

Вывод:

СИМВОЛ *: до 1710 г., после 1710 г., разница 0
СТРОКА: до 1645 г., после 1309 г., Diff 336

Почему выделение массива String не стирается из памяти?

11
задан Udo Klein 27 October 2013 в 10:11
поделиться