从通过函数发送的结构体中复制数组
Copying an array from a struct which is senе through a function
我想发送一个结构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++中声明的任何类的最低要求。
相关文章:
- 在C和C++中初始化结构中的数组
- 使用对const结构的const数组的引用进行构造
- 具有结构成员char数组的sscanf
- 为什么用结构初始化数组需要指定结构名称
- 如何将一个结构的字符数组复制到结构的另一个字符数组中?
- C++ - 将结构类型的数组传递给用户定义的函数
- 将字符数组转换为结构时出现问题. 结构的字符数组变量溢出
- c ++数据输入并读回列表中的结构结构中的数组
- 在两个结构之间共享数组
- C++中用于结构的纯数组的类似于TableView/DataFrame的通用功能
- 在结构中复制构造函数:是否复制数组
- 将结构的动态数组复制到另一个结构
- 使用std::copy将一个结构体的数组转换为另一个结构的Vector
- 在结构体中创建一个特定结构体的数组
- 从通过函数发送的结构体中复制数组
- 用结构体替换数组并使用循环
- 如何将结构体动态数组传递给成员函数
- 结构体、数组和函数
- c++程序帮助:结构体,数组,循环,输入文件,循环不工作
- 带有结构体或数组的c++快捷方式