我确定这是一个新手问题,但我正在研究的这本书展示了如何将结构编码到缓冲区中。但是,这些示例仅适用于简单类型。我试图通过使用动态数组更进一步。
我的问题是,在调用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
...
}
谢谢!
答案 0 :(得分:5)
bodyData
是一个局部变量,但您要将myData->body
设置为指向它。 encode
返回后,bodyData
被销毁,*myData->body
现在未定义。
要修复此问题,您需要在正确分配空间(bodyData
)后将myData->body
的内容深入复制到new[]
。然后你需要确保以后再delete[]
。