Сохранение выделенного значения в выделенном массиве - PullRequest
0 голосов
/ 12 октября 2019

Код, который у меня есть, такой:

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;

}

И это даже не компиляция.

Я бы хотел сохранить значения полезной нагрузки в массиве полезных нагрузок, потому что переменная полезной нагрузки получаетзаменяется на каждой итерации.

Есть ли простое решение для этого?

Ответы [ 2 ]

1 голос
/ 12 октября 2019

Сначала 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);
}
0 голосов
/ 12 октября 2019

Создайте массив указателя типа uint8_t:

uint8_t* payloads[100];

, затем установите для элемента этого массива указатель полезной нагрузки:

payloads[i] = payload;
// make sure payload is of type uint8_t pointer
...