簡體   English   中英

使用std :: copy進行分段錯誤,memcpy有效

[英]Segmentation fault with std::copy, memcpy works

我有一個奇怪的情況,使用std :: copy導致seg故障,因為使用memcpy似乎正常工作。

我正在Google Test函數中創建一個PacketHeader對象。

我已經確認進入對象的數據是有效的,所以我可能是愚蠢的,並且錯過了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));

}

表達方式

aPacketHeader + sizeof(struct pcap_pkthdr)

不符合你的期望。 它實際上將sizeof(pcap_pkthdr) * sizeof(pcap_pkthdr)到指針基址。

請記住, aPointer + somethingaPointer[something]相同。

要么只添加1

aPacketHeader + 1

或者對char*類型轉換:

reinterpret_cast<char*>(aPacketHeader) + sizeof(struct pcap_pkthdr)

顯而易見的解決方案當然應該使用簡單的struct-to-struct復制:

*prPacketHeader = *aPacketHeader;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM