gpt4 book ai didi

c - 将分配的值存储到分配的数组

转载 作者:行者123 更新时间:2023-11-30 19:01:09 25 4
gpt4 key购买 nike

我的代码是这样的:

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

关于c - 将分配的值存储到分配的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58353482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com