我有一个奇怪的情况,使用std :: copy导致seg故障,因为使用memcpy似乎正常工作.
我正在PacketHeaderGoogle Test函数中创建一个对象.
我已经确认进入对象的数据是有效的,所以我可能是愚蠢的,并且错过了std :: copy语法的明显内容.
GCC版本:4.4.6 20120305(Red Hat 4.4.6-4)GTest版本:1.6.0
还与boost :: options和libpcap链接
TEST(SetIP, GoodVals)
{
char errbuf[PCAP_ERRBUF_SIZE];
pcap_t * handle = pcap_open_offline("./test_files/PCAP_Good.pcap", errbuf);
pcap_pkthdr * header;
const unsigned char * pkt_data;
//Load one packet from the PCAP, doesn't matter what
pcap_next_ex(handle, &header, &pkt_data);
PacketHeader p(header);
}
PacketHeader::PacketHeader(const struct pcap_pkthdr * aPacketHeader) : prPacketHeader(NULL)
{
prPacketHeader = new struct pcap_pkthdr;
//This doesn't work
//std::copy(aPacketHeader, aPacketHeader + sizeof(struct pcap_pkthdr), prPacketHeader);
//This works
memcpy(prPacketHeader, aPacketHeader, sizeof(struct pcap_pkthdr));
}
Run Code Online (Sandbox Code Playgroud)
Som*_*ude 10
表达方式
aPacketHeader + sizeof(struct pcap_pkthdr)
Run Code Online (Sandbox Code Playgroud)
不符合你的期望.它实际上添加sizeof(pcap_pkthdr) * sizeof(pcap_pkthdr)到指针基地址.
请记住,这aPointer + something是一样的aPointer[something].
要么只添加1:
aPacketHeader + 1
Run Code Online (Sandbox Code Playgroud)
或类型转换为char*:
reinterpret_cast<char*>(aPacketHeader) + sizeof(struct pcap_pkthdr)
Run Code Online (Sandbox Code Playgroud)
显而易见的解决方案当然应该使用简单的struct-to-struct复制:
*prPacketHeader = *aPacketHeader;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1220 次 |
| 最近记录: |