2014-01-27 63 views
0
 
struct media{ 
    uint32_t addressOfPtr; 
}; 

某處出錯,但我無法看到它。無法將int數組複製到給定結構的結構地址中

 
printf(" > %x", ((uint8_t*) mediaObject2->addressOfPtr)[i]); 

不打印

uint8_t message[SIZE_MAX]; 

for (i=0;i<SIZE_MAX;i++) { 
    message[i] = i+1; 
    printf(" > %x", message[i]); 
} 

uint8_t *msg_Ptr; 
msg_Ptr = malloc(SIZE_MAX*sizeof(uint8_t)); 
memcpy(msg_Ptr, &message, SIZE_MAX); 

printf("\n####################\n"); 

for (i=0; i < SIZE_MAX; i++) // message fixed at length 10 
    printf(" > %x", msg_Ptr[i]); 

printf("\n"); 

struct media *mediaObject2; 
(mediaObject2->addressOfPtr) = malloc(SIZE_MAX*sizeof(uint8_t)); 
(mediaObject2->addressOfPtr) = (uint32_t) msg_Ptr; 
printf("\n####################\n"); // Last stop 
//printf(">>>> %x ", mediaObject2->addressOfPtr); 

printf("\n"); 
for (i=0; i < SIZE_MAX; i++) // message fixed at length 10 
    printf(" > %x", ((uint8_t*) mediaObject2->addressOfPtr)[i]); 

printf("\n"); 
+1

並且應該在''中使用不同的名稱'SIZE_MAX'。 – BLUEPIXY

+0

你,是對的。我會。 –

回答

1

在這一部分:

struct media *mediaObject2; 
(mediaObject2->addressOfPtr) = malloc(SIZE_MAX*sizeof(uint8_t)); 

您正在使用未初始化的指針mediaObject2,它調用一個未定義的行爲

您需要可以動態分配內存爲struct media或者還甚至更好:使用一個變量具有自動存儲時間在這裏:

struct media mediaObject2; 
mediaObject2.addressOfPtr = malloc(SIZE_MAX*sizeof(uint8_t)); 

附註:如果struct media應該持有一個指向數組uint8_t,你應該聲明這個成員爲uint8_t *data或者如果類型會有所不同,但它仍然是一個指針,那麼void* dataPtr至少......任何東西都比uint32_t addressOfPtr;更好。

+0

優秀。 @LihO。 關於進一步的問題。 我怎麼把它傳遞給一個函數,說: 無效functionB(無效*的mediaObject) 並通過結構回uint8_t消息[SIZE_MAX]? –

+0

@UrsaMajor:'functionB(&mediaObject2)'......你可能會考慮花更多的時間閱讀一些書或其他相關材料。 – LihO

+0

我這樣做了,但是它不能在函數內重新加載到uint8_t消息[]。 –