Сначала 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);
}