2014-01-27 49 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消息[]。 –