问题描述
- 在调用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所指的内存地址的起始位置
。。。。。。。。。
每次到这里就出现访存冲突,请教各位大神指点,比较着急,我先在此谢过各位了。。。
解决方案
pData1=(BYTE*)new char[Width*Height];
memcpy(pData1,pData, Width*8*Height);
pData1申请的内存长度为Width*Height.
但是你memcpy时,拷贝的内容长度是Width*8*Height,长度超过了申请的长度.内存访问越界.
所以出错.
解决方案二:
应该是错误使用了指针
解决方案三:
目标内存,长度为Width*Height ,但是你想拷贝这么多Width*8*Height, 越界啦
时间: 2024-11-02 03:31:51