我想创建一个从原始数组偏移而不复制内容的子数组。
即
byte* arr = new byte[4];
//0...3 meaning 0 through 3
arr[0...3] = 1...4
byte* subarr = arr+2;
这样subarr[0]
等于3.这实际上确实有效;如果我打印subarr[0]
我得到3.但是如果我想在memcpy()
这样的函数中使用它,我会收到错误:
实际上没有错误消息,但断点位于free_base.cpp中。我的代码中的断点位于memcpy
。实际用例是:
byte* tempbuffer = new byte[size+2];
ReadProcessMemory(processHandle, (PBYTE*)(moduleStart + offset - 1), tempbuffer, size+2, 0);
byte* subbuffer = tempbuffer + 1;
assert(subbuffer[0] == tempbuffer[1]);
memcpy(out_buffer, subbuffer, size);
delete[] subbuffer;
delete[] tempbuffer;
我知道这个例子中的子数组是多余的,因为我可以将缓冲区传递给ReadProcessMemory
,但这只是为了找到错误。如果我将out_buffer
(这是一个LPVOID)直接传递给ReadProcessMemory
,我会得到有效的结果并且没有错误。此外,如果我在memcpy
(原始数组)上使用tempbuffer
,它也会给我我想要的没有错误。因此,错误必须由子数组引起并在其上使用memcpy
。
为什么会发生这种情况?我可以做些什么呢?
感谢。
答案 0 :(得分:1)
关于子缓冲区的代码很好,调试器中发生错误的原因是因为您正在子缓冲区上调用delete []。您不应该这样做,只需要在tempbuffer上删除[],因为这是用new创建的唯一变量。我测试了您的代码并对此进行了验证。