更改作为参数给出的数组的值

时间:2017-06-27 09:30:31

标签: c++ arrays pointers

我尝试将结构更改为函数中的字节数组。我想给函数一个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;
}

如果我在函数中重新创建结构,那很好。如果我在外面使用我给出的指针创建它,则值是错误的。 我做错了什么?

2 个答案:

答案 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)