C++中内存复制memcpy中地址汇编异常

问题遇到的现象和发生背景

在处理内存拷贝时,目标地址输入时,使用了计算,则得到的地址跟实际需要的地址相差太大。

img

问题相关代码,请勿粘贴截图

BITMAPINFOHEADER bitmaph;
//Fill information BITMAPINFOHEADER
bitmaph.biSize = sizeof(BITMAPINFOHEADER);
bitmaph.biClrUsed = 2;
RGBQUAD bmiColors[2];
bmiColors[0].rgbBlue = 0;
bmiColors[1].rgbGreen =255;
//Allocate buffer
BITMAPINFO nbmi;
nbmi= (BITMAPINFO
)malloc(sizeof(BITMAPINFOHEADER) + bitmaph.biClrUsed * sizeof(RGBQUAD));
char* refpos;
refpos = (char*)nbmi+ sizeof(BITMAPINFOHEADER);
//refpos += sizeof(BITMAPINFOHEADER);
memcpy(nbmi, &bitmaph, sizeof(BITMAPINFOHEADER));
//memcpy(refpos, bmiColors, bitmaph.biClrUsed * sizeof(RGBQUAD));
//memcpy(nbmi+ sizeof(BITMAPINFOHEADER), bmiColors, bitmaph.biClrUsed * sizeof(RGBQUAD));
memcpy(nbmi + 40, bmiColors, bitmaph.biClrUsed * sizeof(RGBQUAD));

运行结果及报错内容

编译时最后一句+40 编译为
00007FF71A8CF925 mov rcx,qword ptr [nbmi]
00007FF71A8CF92C add rcx,6E0h

导致结果异常

我的解答思路和尝试过的方法

如果地址计算在外部独立进行,就没有问题

把你的数据类型贴出来,在把你的问题描述的完整一些