Tôi đang chạy vào một số rò rỉ bộ nhớ nghiêm trọng trong ứng dụng của tôi, vì vậy tôi thiết lập giải pháp cực kỳ trần này để kiểm tra những gì sẽ xảy ra khi một mảng chuỗi đi ra khỏi phạm vi ...Chuỗi mảng không deallocated trên phạm vi thoát
tôi biết rằng việc thực thi TextString cũ của String thiếu một hàm hủy, nhưng việc triển khai hiện tại này dường như có nó.
Tôi đang sử dụng this MemoryFree library (Lưu ý mã được liên kết này hiện đã được khắc phục dựa trên câu trả lời được chấp nhận cho câu hỏi này).
Mã kiểm tra hai kịch bản: Phân bổ mảng char và mảng chuỗi trong hai hàm khác nhau để buộc thoát khỏi phạm vi trên cả hai.
#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 */ }
Output:
CHAR *: Trước 1710, Sau 1710, Diff 0
STRING: Trước năm 1645, Sau 1309, Diff 336
Làm thế nào đến việc phân bổ String
mảng không bị xóa khỏi bộ nhớ?
kết quả là gì khi 'chuỗi' mảng nhỏ hơn nhiều (ví dụ, 10 phần tử)? – ouah
Thú vị: 50 phần tử = khác 136, 25 phần tử = khác 36, 10 phần tử = khác 0 –
Phiên bản phần mềm Arduino nào bạn đang sử dụng (0023, 1.0, ...)? –