クラス内のリストにアクセスするとプログラムがクラッシュする(ESP32)

私はクラスのオブジェクトを別のクラスの一部であるリストの中に格納したいと思っていました。これを試したときに私のプログラムがクラッシュしたので、私はこの最小限の例を作成しました。これは、ArduinoのLinkedList実装を提供するLinkedListライブラリを使用します。面白いことに、クラッシュは、使用されたデータ型(この例ではint、クラスのオブジェクトと比較して)にかかわらず、クラス内のLinkedListにアクセスするときにも発生します。これは、Arduinoの他のすべてのベクトル/リストの実装で発生します。このようなリストをクラス外で使用しても、このような問題は発生しません。私のPCでg ++でstd :: vectorを使うとうまくいきます。

#include 
#include <linkedList.h>

class Packet{
    public:
        Packet(int, int);
        Packet();
        int get_number();
        int get_first_list_member();
    private:
        int number;
        LinkedList myints;//accessing this causes the crash
};

Packet::Packet(int n, int m){
    number=n;
    myints.add(m);
}

//default constructor
Packet::Packet(){

}

int Packet::get_number(){
    return number;
}

int Packet::get_first_list_member(){
    return myints.get(0);
}
// List outside a class -> works as expected
LinkedList p;

void setup() {
    Serial.begin(9600);
    Serial.print("Sketch start!");
    p.add(Packet(200, 100));
}

void loop() {
    Serial.println("Print Packet numbers");
    Serial.print(p.get(0).get_number());
    //here the program crashes when trying to access the LinkedList
    Serial.print(p.get(0).get_first_list_member());
    delay(1000);
}

私はESP32でこれを試しています。生成されたエラーコード:

300CORRUPT HEAP:0x3ffc80a0の頭が悪い。予想される0xabba1234に0x3ffc80e0があります アサーション "head!= NULL" failed:file "/Users/ficeto/Desktop/ESP32/ESP32/esp-idf-public/components/heap/./multi_heap_poisoning.c"、199行目、関数:multi_heap_free abort()がコア1のPC 0x400d0a0fで呼び出されました

なぜそのような構造がクラス内でアクセスできないのでしょうか?これは私が気づいていないArduinoの制限と関係がありますか?

0
ru de
なぜあなたはすべてのメンバー変数に Packet :: を付けるのですか?これにより、静的でないときに静的にアクセスされます。
追加された 著者 Majenko,
あなたのプログラムにはどんな影響がありましたか?
追加された 著者 Majenko,
それを変更しました、ありがとう。
追加された 著者 Chris.Wilson,
なし、上記のクラッシュについて
追加された 著者 Chris.Wilson,

答えはありません

0