我尝试将结构更改为函数中的字节数组。我想给函数一个char指针作为参数,并希望将此指针的值更改为指向新数组。这在函数中有效,但指针外指向一个随机数。
这就是我的功能:
void getNewMessage(char *bit_struct, size_t *msglen) {
Pos struct_data = {0, 0, 1.0, 2.0, 3.0, 0.1, 0.2, 0.3, 100.0};
*msglen = sizeof(struct_data);
char b[*msglen];
memcpy(b, &bit_struct, *msglen);
bit_struct = b;
// Recreate the struct to check
Pos tmp;
memcpy(&tmp, bit_struct, sizeof(tmp));
std::cout << "struct in function is: " << tmp.posX << std::endl;
}
如果我在函数中重新创建结构,那很好。如果我在外面使用我给出的指针创建它,则值是错误的。 我做错了什么?
答案 0 :(得分:3)
char b[*msglen];
这将创建一个本地数组,这意味着一旦离开该函数它将超出范围。其内容未定义。
你想做的是
char* b = (char*) malloc(*msglen);
在C中或
char* b = new char[*msglen];
在C ++中。
在将 b 分配给它之前,不要忘记释放或删除[] bit_struct ,因为它会导致内存泄漏。
作为旁注,
char b[*msglen];
可变长度的数组在C ++中是不合法的。
答案 1 :(得分:1)
bit_struct = b;
无效。将getNewMessage(char *bit_struct, size_t *msglen)
更改为getNewMessage(char*& bit_struct, size_t *msglen)