如何在结构中为结构添加值



我有以下结构:

uint8_t broadcastAddress[] = {0x10, 0x11, 0x12, 0x00, 0x2A, 0x7C};
typedef struct struct_message {
int request_type;
char message[100];
float thermal_data[NUMBER_OF_THERMALCOUPLE];
} struct_message;


typedef struct struct_parameter {
struct_message *message;
uint8_t broadcastAddress;
char label[10];
} struct_parameter;

struct_parameter parameter_Data;

然后在setup()方法中,我设置了以下内容:

memcpy(&parameter_Data.broadcastAddress, broadcastAddress, sizeof(broadcastAddress));
strcpy(parameter_Data.label , "123454");

然后在loop()中,我打印此值:

Serial.println(data.label);

一切都很好,但当我想为struct_message设置一个属性时,我的板会重新启动。

parameter_Data.message->request_type = 1;

有线索吗?我可能做错了。

您当前在struct_parameter中有一个指向struct_message的指针。除非明确分配struct_message,否则不会为其分配存储空间,并且指针将为0或某个随机数。因此,当您尝试在消息中设置request_type时,您正在向内存中的一个随机位置写入内容,这会导致崩溃。

更好的选择是让struct_message成为struct_parameter的成员,而不是使用指向它的指针

typedef struct struct_parameter {
struct_message message;
uint8_t broadcastAddress;
char label[10];
} struct_parameter;

删除*,则告诉C++将整个struct_message放在struct_parameter内,而不仅仅是一个指针

然后你会写:

parameter_Data.message.request_type = 1;

这样就省去了为message管理内存的需要。

最新更新