【问题标题】:Not able to copy int array into struct address of given struct无法将 int 数组复制到给定结构的结构地址中
【发布时间】:2014-01-27 01:10:18
【问题描述】:
结构媒体{ 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");

【问题讨论】:

  • 并且应该使用与&lt;stdint.h&gt;不同的名称SIZE_MAX
  • 你是对的。我会的。

标签: c arrays struct copy


【解决方案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;好。

【讨论】:

  • 优秀。 @LihO。关于另一个问题。如何将其传递给函数,例如:void functionB (void* mediaObject) 并将结构传递回 uint8_t message[SIZE_MAX]?
  • @UrsaMajor: functionB(&amp;mediaObject2)...您可以考虑花更多时间阅读一些书籍或其他相关材料。
  • 我这样做了,但它无法在函数内重新加载到 uint8_t message[]。
猜你喜欢
  • 2015-01-06
  • 1970-01-01
  • 1970-01-01
  • 2012-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-25
相关资源
最近更新 更多