0

我有一个包含bytes信息(有效负载)的数​​组,但我想在两个函数中使用这个数组。我该如何退货?我不知道我是否必须声明它不同或在其他地方。

我的代码:

void loop() {
    byte payload[] = find_fix();
    delay(5*60000);
}


byte find_fix(){
    byte payload[9];

    double lati = sodaq_gps.getLat();
    double longi = sodaq_gps.getLon();
    int nsatis = sodaq_gps.getNumberOfSatellites();
    long lax = lati * 10000000;
    long lox = longi * 10000000;

    payload[0] = (byte) ((lax & 0xFF000000) >> 24 );
    payload[1] = (byte) ((lax & 0x00FF0000) >> 16 );
    payload[2] = (byte) ((lax & 0x0000FF00) >> 8 );
    payload[3] = (byte) ((lax & 0X000000FF));
    payload[4] = (byte) ((lox & 0xFF000000) >> 24 );
    payload[5] = (byte) ((lox & 0x00FF0000) >> 16 );
    payload[6] = (byte) ((lox & 0x0000FF00) >> 8 );
    payload[7] = (byte) ((lox & 0X000000FF));
    payload[8] = (byte) (nsatis);
    SerialUSB.print(" MIGUEL. LATITUD: ");
    SerialUSB.print(payload[0], HEX);
    SerialUSB.print(payload[1], HEX);
    SerialUSB.print(payload[2], HEX);
    SerialUSB.println(payload[3], HEX);
    SerialUSB.print(" MIGUEL. LONGITUD: ");
    SerialUSB.print(payload[4], HEX);
    SerialUSB.print(payload[5], HEX);
    SerialUSB.print(payload[6], HEX);
    SerialUSB.println(payload[7], HEX);
    SerialUSB.print(" MIGUEL. Num Sats: ");
    SerialUSB.println(payload[8], HEX);

    return payload[];
}

我想使用 9 个字节的信息,首先我声明它byte payload[9];,然后我开始写它。这很好用,但现在我想将它退回以在其他函数中使用它,但我不能。

4

1 回答 1

2

您不能从函数返回堆栈分配的内存。一旦函数调用结束,数据将在堆栈指针更新时被回收。您需要像这样动态分配堆上的内存......

byte* find_fix(){
    byte* payload = new byte[9]; // Allocate memory on the heap

    return payload;
}

void loop() {
    byte* payload = find_fix();
    delete[] payload; // Free memory once it is no longer needed
}

或者,如果您知道数组的最大大小,则可以find_fix像这样将内存传递给函数...

void find_fix(byte* payload) {
    ....
}

void loop() {
    byte payload[9];
    find_fix(payload);
}
于 2019-10-23T19:03:56.590 回答