从C ++中的函数返回时,数组数据丢失

时间:2014-06-20 14:14:07

标签: c++

我确定这是一个新手问题,但我正在研究的这本书展示了如何将结构编码到缓冲区中。但是,这些示例仅适用于简单类型。我试图通过使用动态数组更进一步。

我的问题是,在调用encode()之后,调用函数可以看到bodyLen的值,但是" body"的值。迷路了。我做错了什么?

伪代码:

struct outData
{
    uint32_t bodyLen;       // Length of body
    uint32_t *body;         // Array of body elements
};

int encode(uint8_t *buffer, int size)
{
    // Set the buffer to the data structure layout
    outData *myData = (outData *)buffer;

    // Junk data (a nice 10101010...)
    uint32_t junk = 2863311530;

    // Populate body
    uint32_t bodyData[size];
    for (int i=0; i<size; i++)
    {
        bodyData[i] = htonl(junk);
    }

    // Set the buffer
    myData->bodyLen = size;      // This works perfectly
    myData->body = bodyData;     // This is blank to calling function

    ...
}

谢谢!

1 个答案:

答案 0 :(得分:5)

bodyData是一个局部变量,但您要将myData->body设置为指向它。 encode返回后,bodyData被销毁,*myData->body现在未定义。

要修复此问题,您需要在正确分配空间(bodyData)后将myData->body的内容深入复制到new[]。然后你需要确保以后再delete[]