Unhandled exception in *.exe:0xC0000005:Access Violation

果果—妞妞 2011-03-23 10:27:00
程序时不时出现Unhandled exception in *.exe:0xC0000005:Access Violation这样的错误,用Alt+7定位错误在
memcpy(pBuffer,strText,picSize);

程序大致如下:

ADO ado1;
_RecordsetPtr rdp;
_variant_t varBlob;

ado1.OnInitADOConn();

CString strsql,strText;
CString sPic_id;
int picSize = 0;
char *pBuffer = NULL;

sPic_id.Format("%d",pAdInfo->res_id);

int iRes_Format = CBase::GetResFormat(sPic_id);

if(iRes_Format == RESOURCE_FORMAT_ZXTXT || iRes_Format == RESOURCE_FORMAT_WORD )
{
strsql.Format("select Text from FinfoText where Id='%s'",sPic_id);
rdp=ado1.OpenRecordset(strsql);
while(!rdp->adoEOF)
{
picSize=rdp->GetFields()->GetItem("Text")->ActualSize;
strText=(const char*)(_bstr_t)(rdp->Fields->Item["Text"]->Value);
int nLength = strText.GetLength();
//TRACE("picSize = %d,nLength = %d /r/n",picSize,nLength);

pBuffer = new char[picSize+1];
ZeroMemory(pBuffer,picSize+1);

if(pBuffer!=NULL)
{
memcpy(pBuffer,strText,picSize);
}
else
{
continue;
}
rdp->MoveNext();
}
}
ado1.CloseConn();
请各位大侠帮忙分析一下错误的原因,不胜感激!
...全文
419 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
dvlinker 2012-04-16
  • 打赏
  • 举报
回复
温馨提示:LZkeyi结贴了,想拿分啦!哈哈!
dvlinker 2012-04-11
  • 打赏
  • 举报
回复
程序在实际运行时,strText内容的长度是远小于1024的,估计是在memcpy时越界了,后来将:
memcpy( buf, strText, sizeof(buf));
改为:
memcpy( buf, strText, min( sizeof(buf), sizeof(strText)) );
就可以啦!
dvlinker 2012-04-11
  • 打赏
  • 举报
回复
我这边在开发新功能的时候也遇到这样的问题,频繁的报错。
类似与下面的代码:
char buf[1024] = {0};
......// strText已经赋值
memcpy( buf, strText, sizeof(buf)); // 奔溃在这句话上
waltsin 2011-03-23
  • 打赏
  • 举报
回复
这种错误一般是因为内存的问题导致的,如楼上两位说的,已有的空间比实际需要的空间小时,很可能会出这种问题。
果果—妞妞 2011-03-23
  • 打赏
  • 举报
回复
nLength是比picSize小,这样也会引起错误吗?
fangchao918628 2011-03-23
  • 打赏
  • 举报
回复
是不是strText nLength不够picSize这么大,你调试下......
gw_net 2011-03-23
  • 打赏
  • 举报
回复
你要看汇编代码,才知道为什么deny
fangchao918628 2011-03-23
  • 打赏
  • 举报
回复
如果picSize大于strText.GetLength()得到的长度,会出现什么结果呢?
造成读越界,最好不要这样....
memcpy不会以\0为结束符,你要它拷贝多少个,它就会拷贝多少个
你的new 后在那里delete ?没看见
Eleven 2011-03-23
  • 打赏
  • 举报
回复
0xC0000005: 指针越界或者数组溢出~
oyljerry 2011-03-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 rain771228 的回复:]

memcpy(pBuffer,strText,picSize);
如果picSize大于strText.GetLength()得到的长度,会出现什么结果呢?
[/Quote]
数组越界,所以就会出现access violation
waltsin 2011-03-23
  • 打赏
  • 举报
回复
越界访问
果果—妞妞 2011-03-23
  • 打赏
  • 举报
回复
memcpy(pBuffer,strText,picSize);
如果picSize大于strText.GetLength()得到的长度,会出现什么结果呢?

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧