我的应用程序存在严重的内存泄漏问题,因此我设置了这个极简单的解决方案来测试当String数组超出范围时会发生什么...
我知道旧版TextString的String实现缺少析构函数,但是这个当前的实现似乎已经解决了这个问题。
我正在使用这个MemoryFree库 (请注意,这个链接代码现在已根据本问题的接受答案进行修复)。
该代码检查两种情况:在两个不同的函数中分配char数组和string数组,以强制在两者上执行作用域退出。
#include <MemoryFree.h>
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 */ }
输出:
CHAR*:1710年之前,1710年之后,差异为0
STRING:1645年之前,1309年之后,差异为336
为什么String
数组分配没有从内存中清除?