我是 c++ 的新手(来自 java/c#),试图理解指针和引用。我看了很多教程(头疼),我想我明白了,但现在偶然发现新场景让我抓狂。
我有一个 c++ 函数,它接受指向数组的指针,需要通过取消引用指针来枚举它们。
static String buidTempMessage(String* sensorIdStr[]) {
String msg = "";
int tempSensorCount = sizeof(*sensorIdStr);
Serial.print("sizeof sensorIdStr = ");
Serial.println(tempSensorCount);
for (int x = 0; x < tempSensorCount; x++) {
Serial.print(x);
Serial.print(" -> ");
Serial.print(*sensorIdStr[x]);
}
return msg;
}
一旦循环到达数组中的第二条记录,它就会崩溃:
sizeof sensorIdStr = 4
0 -> 28 e6 ee 10 4 0 0 5b | Temp = 28.19
1 -> Guru Meditation Error: Core 1 panic'ed (LoadStoreError). Exception was unhandled.
Core 1 register dump:
PC : 0x400e42a0 PS : 0x00060d33 A0 : 0x800dbabb A1 : 0x3ffb1fa0
A2 : 0x3ffbdc9c A3 : 0x400d4238 A4 : 0x400d4238 A5 : 0x3ffb1fdc
A6 : 0x00060d20 A7 : 0x00000001 A8 : 0x00000000 A9 : 0x00000024
A10 : 0x60000000 A11 : 0x3ff40000 A12 : 0x00060d20 A13 : 0x00060d23
A14 : 0x007bdca0 A15 : 0x003fffff SAR : 0x0000001a EXCCAUSE: 0x00000003
EXCVADDR: 0x400d4238 LBEG : 0x4008ab75 LEND : 0x4008ab85 LCOUNT : 0xfffffffe
Backtrace: 0x400e429d:0x3ffb1fa0 0x400dbab8:0x3ffb1fd0 0x400dc978:0x3ffb2000 0x400dd0d9:0x3ffb2050 0x400d9c90:0x3ffb2080 0x400d7f95:0x3ffb20a0 0x401503b2:0x3ffb20c0 0x400d2fae:0x3ffb20e0 0x400d2dad:0x3ffb2230 0x400d837e:0x3ffb2290
这针对 ESP32,不确定这是否重要。
我需要遍历所有数组记录并构建我的字符串。我不能遍历作为指针传递的数组吗?我以为这是允许的。