簡體   English   中英

無法將結構指針分配給內存數組

[英]Unable to assign struct pointer to memory array

我試圖在 struct 中指向一個內存地址:

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

有人可以指出可能不正確的地方嗎? 謝謝。

該代碼可能適用於 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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM