【发布时间】:2011-06-20 20:59:13
【问题描述】:
我正在使用vector<char> 通过套接字发送和接收数据。在这个向量中,我存储了不同类型的数据。无符号整数和双精度数。
要解码来自向量的数据,我使用copy 函数。
vector<char> myVector = ... smth;
double value = 0.0;
copy(myVector.begin(), myVector.begin() + sizeof(value), &value);
它可以毫无问题地与整数一起使用。但是……
我的问题是,编译给出了一个错误"free(): invalid pointer: 0x00000000006d0e30"。我查了一下,问题出在双精度值上,而不是向量上。我查看了它的双值地址(0x6d0e38)。为什么程序试图向后访问指针?
如果你能说我做错了什么,我会很高兴。它是解码消息的好方法吗?
非常感谢。
【问题讨论】:
-
发布所有失败的代码。请注意
sizeof(double) > sizeof(int)。不能依赖接收端和发送端数据的字节序相同,所以不,这不是一个好的设计。 -
请检查你的向量的大小,不管“但我知道这不仅仅是 sizeof(value) !”
-
这只是一个错误。在此消息之后,我只有一长串 Qt 库(Backtrace)。是的,我知道 double 比 int 大。当我对 vector
进行编码时,我采用了 double 的整个大小。 -
@BatchyX:我也检查了向量的大小。在 double 值之后存储了八个无符号整数。所以向量的大小是40。(8*4 + 8)。
-
重申@BatchyX 的评论,您应该在计算
myVector.begin() + sizeof(value)之前验证myVector.size() <= sizeof(value)。