Невозможно назначить указатель структуры на массив памяти - PullRequest
0 голосов
/ 24 июня 2019

Я пытаюсь указать адрес памяти в структуре:

    typedef struct {
        uint32_t dataAddress;
    } response_struct;

на инициализированный массив:

uint8_t *msg = NULL;
msg = malloc(sizeof(uint8_t)*LEN);

    printf("Init: \n");
    for (i=0; i<LEN; i++) {
        msg[i] = i;
        printf("%d ", msg[i]);
    }

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

// case 1:
(response_struct_ptr->dataAddress) = (uint32_t) msg;

// or with case 2:
void assign_value_to_memory_address_given (uint8_t *msg, response_struct *response_struct_ptr) {
    (response_struct_ptr->dataAddress) = (uint32_t) msg;

}

// e.g. assign_value_to_memory_address_given (msg, response_struct_ptr);

дисплей сталкивается с ошибкой сегментации (ядро сброшено)

    for (i=0; i < LEN; i++)  // message fixed at length 10
        printf(" %x",  ((uint8_t*) response_struct_ptr->dataAddress)[i]);

    printf("\n");

Может кто-то указать, где может быть неправильно?Спасибо.

1 Ответ

0 голосов
/ 24 июня 2019

Код может работать для 32-разрядного устройства, но не для 64-разрядного.

Как подсказывает @melpomene, если вы работаете на 64-битной платформе, потому что указатели просто не помещаются в 32-битные.Следовательно, в код можно внести исправления, изменив тип:

    typedef struct {
        //uint32_t dataAddress;
        uint8_t *dataAddress;
    } response_struct;

и предложенный @immibis для исправления строки кода:

//(response_struct_ptr->dataAddress) = (uint32_t) msg;
(response_struct_ptr->dataAddress) = msg;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...