String 有没有办法释放Arduino字符串()以释放内存?

String 有没有办法释放Arduino字符串()以释放内存?,string,memory,arduino,arduino-ide,arduino-c++,String,Memory,Arduino,Arduino Ide,Arduino C++,有没有办法处置Arduino字符串对象,以便在不再需要该字符串时释放它使用的内存 我在该引用中没有找到函数,当我调用free(&str)时,会抛出一个异常 提前感谢你的帮助。 西蒙 编辑: 我用ArduinoIDE编写代码,如下所示 void setup() { // a few setup things } void loop() { String str1 = "some json String"; String str2 = str1.substring(

有没有办法处置Arduino字符串对象,以便在不再需要该字符串时释放它使用的内存

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

提前感谢你的帮助。 西蒙

编辑: 我用ArduinoIDE编写代码,如下所示

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
}

如果不影响变量命名太多,可以考虑将<代码>子字符串< /代码>和<代码> JSONReaveWisteStase<代码>分配给<代码>字符串您正在运行。

String
的赋值运算符表现良好,并按预期释放内存

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


你能把代码显示在声明和使用的地方吗?在C++中从对象中检索内存的规范方法是让它们超出范围。<代码>自由< /代码>被用作对<代码> MalOC 的补充。你不应该在C++中使用<代码> MalCal。@约翰菲利奥,好的,谢谢你的信息,这是很好的知道。只使用一个字符串对象,根本不使用<代码>字符串< />。它臃肿、浪费、缓慢。使用常规的C字符串并静态声明它们。@s137,它将加快内存碎片化的速度,并且您将更快地用完堆。不要使用String@Juraj我知道,这里的问题是我必须使用String,因为我正在使用的库需要一个String-Object。那没关系
String str = "some json String";
str = jsonRemoveWhiteSpace(str.substring(10));