jeudi 3 février 2022

When i pass the "nullptr" as constructor argument, i get "Guru Meditation Error: Core 1 panic'ed (LoadProhibited)." error

I want to write a CSV parser library. I have a class that holds the document itself which is called CSV with a method that finds and returns the desire row of document :

class CSV
{
private:
    /* data */
    char* const m_buffer{nullptr};
    const uint16_t m_number_of_columns;

public:
    CSV(size_t size, uint16_t number_of_column);
    ~CSV();
    //This function finds a row through its number.
    CSV_Row row_get (uint16_t row_number){
        char *buf = find_start_of_row(row_number); //If row_number don't be valid returns "nullptr"
        Serial.println("Debug:1");
        //The error will occur here, when send nullptr to CSV_Row constructore.
        if (nullptr == buf) return (CSV_Row(nullptr));
        Serial.println("Debug:2");
        return CSV_Row(this, buf);
    };

    friend class CSV_Row;
};

Also i have a CSV_Row class that holds a row of document :


class CSV_Row
{
private:
    /* data */
    CSV* m_csv;
    const char**m_cells{nullptr};
    char* m_location{nullptr};

public:
    CSV_Row(CSV* csv, char* const location = nullptr)
    {
        Serial.println("Debug:3");
        if (nullptr != csv)
        {
            m_csv = csv;
            m_location = location;
            m_cells = new const char*[m_csv->m_number_of_columns];
            Serial.println("Debug:4");
        }
    };
    ~CSV_Row();

};

And i use above classes as :

#define VALID
CSV my_csv(1000, 4);
void setup (){
/*I initialize the my_csv here, its content is :
col1,col2,col3,col4
ce11,ce12,ce13,ce14
ce21,ce22,ce23,ce24
*/

#ifdef VALID
CSV_Row my_row = my_csv.row_get(1);  //Use method with valid argument
#else
CSV_Row my_row = my_csv.row_get(6);   //Use method with invalid argument
#endif
Serial.println("Debug:5");
}

void loop()
{
}

When i use row_get() method with valid argument the program runs without any error and serial monitor shows :

Debug:1
Debug:2
Debug:3
Debug:4
Debug:5

and when i use those method with invalid argument the program will crash and serial monitor show :

Debug:1
Debug:3
Debug:5
Guru Meditation Error: Core 1 panic'ed (LoadProhibited). Exception was unhandled.
Core 1 register dump:
I remove additional data

What is wrong with my code?

Aucun commentaire:

Enregistrer un commentaire