我有的代码是这样的:
uint8_t* payload = (uint8_t*)malloc(payload_size);
uint8_t* payloads = (uint8_t*)malloc(payload_size * 100);
for(uint8_t i = 0; i < 100; i++ ){
create_payload(payload); //cannot modify
//myapproach
payloads[i] = payload;
}
这甚至不是编译。
我想将有效载荷值存储到有效载荷数组中,因为有效载荷变量在每次迭代时都会被替换。
有没有一个简单的解决方案?
首先,payloads
应该指向uint8_t
的指针,而不是uint8_t
本身(因为您想在此数据上存储指针(
然后,您为每个有效负载创建使用相同的缓冲区,因此使用指向相同数据的指针填充有效负载,您需要为每个有效负载分配新的缓冲区
并且,最后 - 生成的缓冲区的大小将是
size of one entry *pointer* * count of entries
不是
size of one entry * count of entries
因此,生成的代码将是:
uint8_t** payloads = (uint8_t**)malloc(sizeof(uint8_t*) * 100);
// uint8_t* payloads[100]; - Will also work
for(uint8_t i = 0; i < 100; i++ ){
uint8_t* payload = (uint8_t*)malloc(payload_size);
create_payload(payload); //cannot modify
payloads[i] = payload;
}
或者,如果您希望所有有效负载位于同一缓冲区中,请使用malloc
将有效负载复制到输出:
uint8_t* payload = (uint8_t*)malloc(payload_size);
uint8_t* payloads = (uint8_t*)malloc(payload_size * 100);
for(uint8_t i = 0; i < 100; i++ ){
create_payload(payload); //cannot modify
memcpy(payloads + i * payload_size, payload, payload_size);
}
创建一个uint8_t
指针类型的数组:
uint8_t* payloads[100];
然后将该数组的一个元素设置为您拥有的有效负载指针:
payloads[i] = payload;
// make sure payload is of type uint8_t pointer