通过作为指针(按地址)传递给函数的数组进行枚举时崩溃

问题描述 投票:0回答:0

我是 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,不确定这是否重要。

我需要遍历所有数组记录并构建我的字符串。我不能遍历作为指针传递的数组吗?我以为这是允许的。

c++ arrays pointers
© www.soinside.com 2019 - 2024. All rights reserved.