有没有办法将Arduino String释放给内存?

问题描述

是否有一种方法可以处理Arduino字符串对象,因此当不再需要该字符串时,它释放的内存将被释放?

我没有在引用中找到函数,当我调用free(&str)时,抛出了异常。

在此先感谢您的帮助。 西蒙

编辑: 我这样用Arduino-IDE进行编码

void setup() {
  // a few setup things
}

void loop() {
  String str1 = "some json String";
  String str2 = str1.substring(10);
  String str3 = jsonRemoveWhiteSpace(str2);
  // so at this point I'd like to dispose of str1 and str2 to free up the memory,// because the strings are also quite long json strings.
}

解决方法

您可以使用花括号来显示明确的范围。 C ++标准要求在范围内声明的对象超出范围时必须销毁。对于管理动态内存的对象(例如String),这意味着动态内存将被释放到系统中。

void loop() {
  String str3;
  {
    // explicit scope begins here...

    String str1 = "some json String";
    String str2 = str1.substring(10);

    str3 = jsonRemoveWhiteSpace(str2);

    // ...and ends here
  }
  // at this point str1 and str2 go out of scope,and are destroyed
  // str3 was declared outside of the scope,so is fine
}

如果它不会过多影响变量的命名,则可以考虑将substringjsonRemoveWhiteSpace的结果分配给您正在操作的StringString的赋值运算符表现良好,并按预期释放内存。

String str = "some json String";
str = str.substring(10);
str = jsonRemoveWhiteSpace(str);

String str = "some json String";
str = jsonRemoveWhiteSpace(str.substring(10));