【发布时间】:2012-01-15 22:41:19
【问题描述】:
我在我的应用程序中遇到了一些严重的内存泄漏,所以我设置了这个非常简单的解决方案来测试当字符串数组超出范围时会发生什么......
我知道 String 的旧 TextString 实现缺少析构函数,但当前的实现似乎有它。
我正在使用this MemoryFree library(请注意,此链接代码现已根据该问题的公认答案修复)。
代码检查了两种情况:在两个不同的函数中分配 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
字符串:1645 之前,1309 之后,差异 336
String 数组分配怎么没有从内存中擦除?
【问题讨论】:
-
String数组更小(例如,10 个元素)时的结果是什么? -
有趣:50 个元素=diff 136, 25 个元素=diff 36, 10 个元素=diff 0
-
您使用的是什么版本的 Arduino 软件(0023、1.0、...)?
-
我使用的是 1.0 版软件,在带有 ATmega328 控制器的 Arduino UNO R3 板上运行。