C++ C++;memcpy未按预期进行复制

C++ C++;memcpy未按预期进行复制,c++,memory,memcpy,C++,Memory,Memcpy,您眼前的问题是uMemory是一个指针,并且在行中 memcpy(&uMemory+address,&num2,2) 您正在形成指向指针的指针&uMemory的类型为BYTE**,因此,当您执行指针算术时,每次都会移动一个指针宽度,根据您的输出判断,平台上的指针宽度显然是4个字节 当你在这里写东西的时候,你也在随机地重击一段内存,很可能是内存中保存着数据对象本身(因为这是指针后面立即声明的内容)。这是我的解决方案。如果可能的话,我希望有更好的编码实践的替代方案 00 00 00 00 00 00

您眼前的问题是
uMemory
是一个指针,并且在行中

memcpy(&uMemory+address,&num2,2)

您正在形成指向指针的指针
&uMemory
的类型为
BYTE**
,因此,当您执行指针算术时,每次都会移动一个指针宽度,根据您的输出判断,平台上的指针宽度显然是4个字节


当你在这里写东西的时候,你也在随机地重击一段内存,很可能是内存中保存着
数据
对象本身(因为这是指针后面立即声明的内容)。

这是我的解决方案。如果可能的话,我希望有更好的编码实践的替代方案

00 00 00 00 00 00 00 00 00 01 00 00 2D 00 00 00 01 00 00 00 00 00 00 00 B0 00 00 00 F9 00 00 00 1E 00 00 00
std::原子内存[256];
int地址=0;
std::矢量阵列;
对于(int i=0;i

我唯一不明白的是,我必须使用std::atomic,这样内存才不会变得随机。有不同的方法吗?

因为
uMemory
未初始化。这是故意的吗?另外
&uMemory
是局部变量
uMemory
的地址。这里不需要
memcpy()
,只要
uMemory[address++]=num2
应该可以工作,但是您需要正确初始化
uMmemory
。这是一种相当低效的十六进制数据解码方法。uMemory[address++]=num2;一开始是有效的,但后来它在内存中被弄乱了。如何正确初始化它..因为我尝试的所有操作都会阻止正确的值被复制。我这样做是因为字符串是从用户输入中获取的,所以它不总是“00 00 00 2D 01 00 B0 F9 1E 00”
00 00 00 00 00 00 00 00 00 01 00 00 2D 00 00 00 01 00 00 00 00 00 00 00 B0 00 00 00 F9 00 00 00 1E 00 00 00
    std::atomic<BYTE> uMemory[256];
    int address = 0;
    std::vector<BYTE> array;
    for (int i = 0; i < data.length(); i += 2)
    {
        std::string data_1 = data.substr(i, 2);
        DWORD num2 = std::stoi(data_1, 0, 16);
        array.push_back(num2);
    }

    std::copy(std::begin(array), std::end(array), std::begin(uMemory));