Description
Reported at https://forum.arduino.cc/t/why-does-the-compiler-add-4x-00-to-a-string-array-element/1152890
UNO R4 Wifi, version 1.0.2 of this core.
String patternNames[] = {
"@@@@@",
"Light-weight spaceship",
"R-Pentomino",
"Diehard",
""
};
void setup() {
Serial.begin(9600);
delay(1000);
Serial.println("Looking at the first characters of the first element i the String-Arrazy");
Serial.println(String(patternNames[0].charAt(0), HEX));
Serial.println(String(patternNames[0].charAt(1), HEX));
Serial.println(String(patternNames[0].charAt(2), HEX));
Serial.println(String(patternNames[0].charAt(3), HEX));
Serial.println(String(patternNames[0].charAt(4), HEX));
Serial.end();
}
void loop() {}
Output:
Looking at the first five characters of the first element in the String-Array
0
0
0
0
40
Should be 5× 40
.
Removing the last empty string from the array causes the right characters to be printed.
I've done some reverse engineering of the binary already (https://forum.arduino.cc/t/why-does-the-compiler-add-4x-00-to-a-string-array-element/1152890/44), but could not find anything, so I suspect memory corruption by some Core function (probably a 32-bit write to the beginning of the heap, presumably somewhere in a global constructor, initVariant
, analogReference
or startAgt
).
Ideally, someone with access to an UNO R4 and a hardware debugger would debug it with the necessary watchpoints to see what causes the memory to be overwritten.