问题描述
是否有一种方法可以处理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
}
如果它不会过多影响变量的命名,则可以考虑将substring
和jsonRemoveWhiteSpace
的结果分配给您正在操作的String
。 String
的赋值运算符表现良好,并按预期释放内存。
String str = "some json String";
str = str.substring(10);
str = jsonRemoveWhiteSpace(str);
或
String str = "some json String";
str = jsonRemoveWhiteSpace(str.substring(10));