std :: copy设置指针为null

时间:2013-03-28 01:39:40

标签: c++ copy std

我正在研究一些代码,我有一点我会抓取一些二进制数据,然后想从中提取一些字节。所以,我有以下内容:

unsigned char * payload;
int payload_size;
uint32_t major = 0, minor = 0;
payload = out_resp.get_payload(&payload_size); // Retrieve the data, return a pointer
if(payload_size >= 8) { // Need at least 8 bytes in the payload
    std::copy(payload, payload + 4, &major);
    std::copy(payload + 4, payload + 8, &minor);
}

如您所见,有效负载的前四个字节应放在major中,接下来的四个放在minor中。但是,在进行调试时,我注意到在第一个std::copy之后,我的变量payload设置为NULL

这是std::copy的预期行为,还是出了问题?我应该通过简单地创建另一个指针并将其传递给std::copy

来避免这种情况

1 个答案:

答案 0 :(得分:4)

std::copy不像memcpy那样有效。您的std::copy(payload, payload + 4, &major);将复制:

(&major)[0] = payload[0];
(&major)[1] = payload[1];
(&major)[2] = payload[2];
(&major)[3] = payload[3];

这不是你需要的。 (&major)[1]超出范围,因此分配它会导致未定义的行为。