Yoeri Kroon
Yoeri Kroon

Reputation: 33

Copying an array from a struct which is senе through a function

I have want to send a struct to json->setInformation but my program crashes when i try to copy the array which is inside the struct. The rest of the data is okay its just the array which makes the crash occur.

info = data->getInformation();

json->setInformation(info);

getInformation returns a struct which i can read in main.cpp when i try to send this struct to setInformation it crashes...

information.h which holds my struct

struct information{
        String location;
        String protocol;
        uint8_t groupID;
        uint8_t* data;

information& operator=(const struct information& that){
    location = that.location;
    protocol = that.protocol;
    groupID = that.groupID;
    for (int i = 0; i < 9; ++i){
        data[i] = that.data[i];
    }
    return *this;
}
};

json.cpp

void JSON::setInformation(information data){
info->location = data.location;
info->protocol = data.protocol;
info->groupID = data.groupID;
// for (int i = 0; i < 9; ++i){
//     info->data[i] = data.data[i];
// }
// Serial.print("after JSON: ");
// Serial.println(info->data[0]);
}

this code works fine but when i uncomment the for lop which should copy the array it crashes

Upvotes: 0

Views: 68

Answers (2)

Dali
Dali

Reputation: 344

Did you allocate memory for your uint8_t data* parameter before using it ?

Then remember to deallocate memory when you don't need it anymore, thus avoiding memory leaks.

Upvotes: 1

jpo38
jpo38

Reputation: 21514

Your object is passed by copy to the function, but you have no copy constructor.

Default copy constructor will not copy you raw pointer correctly. So either you declare and implement a copy constructor, either you replace your raw pointer (uint8_t*) by a vector (std::vector<uint8_t>) which is safely copyiable (then copying the object will become a valid operation).

Moreover, we can't see who's allocating/deallocating your raw pointer, but I suspect you are missing a destructor function too.

Your code breaks the rule of three which is the minimal requirement for any class you'll declare in C++.

Upvotes: 0

Related Questions