【错误集锦】memcpy内存冲突错误

不要想了,肯定是内存访问越界了!

错误代码:

BYTE* tempptr = new BYTE [bmpFileH.bfSize-bmpFileH.bfOffBits];

for(int i=h-1;i>=0;i--)	//遍历行
{				
	for(int j=0;j<w;j++)	//遍历列
	{
		int bits = depth/8;
		for(int k=0;k<bits;k++)	//遍历通道
		{
			//*pData++= pRaw[i*w+j*bits+k];		
				
			*tempptr++= pRaw[i*w+j*bits+k];	
			
		}
	}
}

memcpy(pData, tempptr, bmpFileH.bfSize-bmpFileH.bfOffBits);

tempptr在循环中不断自增,最后memcpy时该指针指向new的那段内存的末尾,以此为memcpy的起点肯定会越界

修改为:

BYTE* tempptr = new BYTE [bmpFileH.bfSize-bmpFileH.bfOffBits];
BYTE* idxtemp = tempptr;
for(int i=h-1;i>=0;i--)	//遍历行
{				
	for(int j=0;j<w;j++)	//遍历列
	{
		int bits = depth/8;
		for(int k=0;k<bits;k++)	//遍历通道
		{
			//*pData++= pRaw[i*w+j*bits+k];		
				
			*idxtemp++= pRaw[i*w+j*bits+k];	
			
		}
	}
}

memcpy(pData, tempptr, bmpFileH.bfSize-bmpFileH.bfOffBits);


你可能感兴趣的:(C++)