2 hezhichuang hezhichuang 于 2013.08.11 10:13 提问

在调用memcpy函数时出现 异常: 0xC0000005: 读取位置 0x006bd000 时发生访问冲突

BOOL Kirsch(BYTE *pData,int Width,int Height)
{//定义实现Kirsch算法的8个模板;
int i,j,s,t,k,max,sum[8];
static int a[3][3]={{+5,+5,+5},{-3,0,-3},{-3,-3,-3}};
static int a1[3][3]={{-3,+5,+5},{-3,0,+5},{-3,-3,-3}};
static int a2[3][3]={{-3,-3,+5},{-3,0,+5},{-3,-3,+5}};
static int a3[3][3]={{-3,-3,-3},{-3,0,+5},{-3,+5,+5}};
static int a4[3][3]={{-3,-3,-3},{-3,0,-3},{+5,+5,+5}};
static int a5[3][3]={{-3,-3,-3},{+5,0,-3},{+5,+5,-3}};
static int a6[3][3]={{+5,-3,-3},{+5,0,-3},{+5,-3,-3}};
static int a7[3][3]={{+5,+5,-3},{+5,0,-3},{-3,-3,-3}};
if(pData==NULL)
{

    AfxMessageBox(L"图像数据为空,请读取图像数据!");
    return FALSE;
}
BYTE *pData1=NULL;
pData1=(BYTE*)new char[Width*Height];
if(pData1==NULL)//图像缓冲数据区pData1不为空;
{
    AfxMessageBox(L"图像缓冲数据区申请失败,请重新申请图像数据缓冲区!");
    return FALSE ;
}
memcpy(pData1,pData, Width*8*Height);//从源src所指的内存地址的起始位置开始拷贝N个字节到目标dest所指的内存地址的起始位置

。。。。。。。。。
每次到这里就出现访存冲突,请教各位大神指点,比较着急,我先在此谢过各位了。。。

3个回答

whizer
whizer   2013.11.29 13:27
已采纳

pData1=(BYTE*)new char[Width*Height];
memcpy(pData1,pData, Width*8*Height);

pData1申请的内存长度为Width*Height.
但是你memcpy时,拷贝的内容长度是Width*8*Height,长度超过了申请的长度.内存访问越界.
所以出错.

yu75567218
yu75567218   2013.10.18 09:25

应该是错误使用了指针

zhimingcom
zhimingcom   2015.12.29 11:08

目标内存,长度为Width*Height ,但是你想拷贝这么多Width*8*Height, 越界啦

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!