从通过函数发送的结构体中复制数组

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

本文关键字:结构体 复制数组 函数      更新时间:2023-10-16

我想发送一个结构json->setInformation,但我的程序崩溃时,我试图复制这是结构内部的数组。其余的数据是正常的,只是这个数组导致了崩溃。

info = data->getInformation();
json->setInformation(info);

getInformation返回一个可以在main.cpp中读取的结构体当我尝试将此结构体发送到setInformation时,它崩溃了…

information.h保存结构体

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]);
}

这段代码工作得很好,但是当我取消注释for lop时,它应该复制数组,它崩溃了

你在使用uint8_t data*参数之前分配内存了吗?

当您不再需要内存时,请记住释放内存,从而避免内存泄漏。

您的对象通过copy传递给函数,但是您没有复制构造函数。

默认复制构造函数不会正确复制原始指针。因此,要么声明并实现复制构造函数,要么将原始指针(uint8_t*)替换为可安全复制的vector (std::vector<uint8_t>)(然后复制对象将成为有效操作)。

此外,我们无法看到谁在分配/释放你的原始指针,但我怀疑你也遗漏了一个析构函数。

你的代码违反了三个规则,这是你在c++中声明的任何类的最低要求。