在处理内存拷贝时,目标地址输入时,使用了计算,则得到的地址跟实际需要的地址相差太大。
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
导致结果异常
如果地址计算在外部独立进行,就没有问题
把你的数据类型贴出来,在把你的问题描述的完整一些