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