मैं अपने आवेदन में कुछ गंभीर मेमोरी लीक में चल रहा है, इसलिए मैं सेटअप के परीक्षण हेतु क्या होता है जब एक स्ट्रिंग सरणी दायरे से बाहर चला जाता है यह अत्यंत नंगे समाधान पर पुनः आवंटित की जाती नहीं ...स्ट्रिंग सरणी दायरे से बाहर निकलें
मुझे पता है स्ट्रिंग के पुराने टेक्स्टस्ट्रिंग कार्यान्वयन में विनाशक की कमी थी, लेकिन इस वर्तमान कार्यान्वयन में ऐसा लगता है।
मैं this MemoryFree library (का उपयोग कर रहा हूं नोट करें कि इस लिंक किए गए कोड को अब इस प्रश्न के स्वीकृत उत्तर के आधार पर तय किया गया है)।
कोड दो परिदृश्यों की जांच करता है: दो अलग-अलग कार्यों में चार सरणी और स्ट्रिंग सरणी का आवंटन दोनों पर दायरे से बाहर निकलने के लिए मजबूर करता है।
#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 के बाद Diff 0
STRING: 1645 से पहले, 1309 के बाद, Diff 336
कैसे String
सरणी आवंटन आ स्मृति से मिटा नहीं है?
परिणाम क्या है जब 'स्ट्रिंग' सरणी बहुत छोटे (जैसे 10 तत्वों) है? – ouah
दिलचस्प: 50 तत्व = diff 136, 25 तत्व = diff 36, 10 तत्व = diff 0 –
क्या आप Arduino सॉफ़्टवेयर का उपयोग कर रहे हैं (0023, 1.0, ...)? –