无法将int数组复制到给定struct的struct地址中

时间:2014-01-27 01:10:19

标签: c arrays struct copy

struct media{
     uint32_t addressOfPtr; 
 };

某处有些错误,但我无法看到它。

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 个答案:

答案 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;好。