0xC0000005: Access Violation,这是什么问题?如何解决?

xiefuming 2008-01-29 04:19:09
网上好像说是因为未赋值引用造成的。按照他说的方法我试了下,不知道是哪个。不知道是否为图片中红色部分的,要怎么解决呢?
...全文
1170 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
_胡子鱼_ 2008-10-17
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 xiefuming 的回复:]
不好意思。问题解决了。问题不在上面的那些代码中。而是m_RichEdit.InsertBitmap(dlg.GetPathName())这条语句中的m_RichEdit的问题,没赋值就直接用了。
[/Quote]

RichEdit赋值,怎么赋值呀,我也遇到这个问题,谢谢
brookmill 2008-01-30
  • 打赏
  • 举报
回复
在调试器里检查所有可疑指针的值,看看哪个指向0xC0000005,(或者把指针的值printf出来)然后再研究为什么会指错了地方。
xiefuming 2008-01-30
  • 打赏
  • 举报
回复
对了,忘记说了,我用的是网上的代码。本人是个菜鸟。
xiefuming 2008-01-30
  • 打赏
  • 举报
回复
再附上一张图片。
xiefuming 2008-01-30
  • 打赏
  • 举报
回复
代码有点长。
void CRichEditCtrlEx::InsertBitmap(CString szFileName)
{
USES_CONVERSION;
SCODE sc = ::CreateILockBytesOnHGlobal(NULL, TRUE, &m_lpLockBytes);
if (sc != S_OK)
AfxThrowOleException(sc);
ASSERT(m_lpLockBytes != NULL);

sc = ::StgCreateDocfileOnILockBytes(m_lpLockBytes,
STGM_SHARE_EXCLUSIVE|STGM_CREATE|STGM_READWRITE, 0, &m_lpStorage);
if (sc != S_OK)
{
VERIFY(m_lpLockBytes->Release() == 0);
m_lpLockBytes = NULL;
AfxThrowOleException(sc);
}

//CString szFileName( _T("C:\\Dev\\RTFBitmap\\reportplot.bmp") );

// attempt to create the object
sc = ::OleCreateFromFile(CLSID_NULL, T2COLE(szFileName),
IID_IUnknown, OLERENDER_DRAW, NULL, NULL,
m_lpStorage, (void **)&m_lpObject);
if ( sc != S_OK )
{
TCHAR * lpMsgBuf;
::FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM, NULL,
::GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf, 0, NULL );
CString msg( lpMsgBuf );
msg += _T("\n\n\nThe following file, created in\n"
"Simulation->Plot, may be missing due\n"
"to not doing a File->Save Workspace:\n\n" );
msg += szFileName;
AfxMessageBox( msg, MB_OK );
::LocalFree( lpMsgBuf );
return;
}

// m_lpObject is currently an IUnknown, convert to IOleObject
if (m_lpObject != NULL)
{
LPUNKNOWN lpUnk = m_lpObject;
m_lpObject = QUERYINTERFACE(lpUnk, IOleObject);
lpUnk->Release();
if (m_lpObject == NULL)
AfxThrowOleException(E_OUTOFMEMORY);
}

// cache the IViewObject interface
m_lpViewObject = QUERYINTERFACE(m_lpObject, IViewObject2);
if (m_lpViewObject == NULL)
return;

// setup for advises; we assume that OLE cleans them up properly
LPADVISESINK lpAdviseSink =
(LPADVISESINK)GetInterface(&IID_IAdviseSink);

// set up view advise
VERIFY(m_lpViewObject->SetAdvise(DVASPECT_CONTENT, 0, lpAdviseSink)
== S_OK);

// the server shows these in its user-interface
// (as document title and in File Exit menu)
m_lpObject->SetHostNames(T2COLE(AfxGetAppName()),
T2COLE(_T("Test")));

// all items are "contained" -- this makes our reference to this object
// weak -- which is needed for links to embedding silent update.
OleSetContainedObject(m_lpObject, TRUE);

CHARRANGE cr;
this->GetSel( cr );
cr.cpMin = cr.cpMax -1;
this->SetSel( cr );

REOBJECT reo;
memset( &reo, 0, sizeof( reo ) );
reo.cbStruct = sizeof( reo );
CLSID classID;
if ( m_lpObject->GetUserClassID( &classID ) != S_OK)
classID = CLSID_NULL;
reo.clsid = classID;
reo.cp = REO_CP_SELECTION;
reo.poleobj = m_lpObject;
reo.pstg = m_lpStorage;
LPOLECLIENTSITE lpClientSite;
this->GetIRichEditOle()->GetClientSite( &lpClientSite );
reo.polesite = lpClientSite;
SIZEL sizel;
sizel.cx = sizel.cy = 0; // let richedit determine initial size
reo.sizel = sizel;
reo.dvaspect = DVASPECT_CONTENT;
reo.dwFlags = REO_RESIZABLE;
reo.dwUser = 0;
HRESULT hr = this->GetIRichEditOle()->InsertObject( &reo );

}
xiefuming 2008-01-30
  • 打赏
  • 举报
回复
谢谢各位大侠的指点。可以结帖了!
xiefuming 2008-01-30
  • 打赏
  • 举报
回复
不好意思。问题解决了。问题不在上面的那些代码中。而是m_RichEdit.InsertBitmap(dlg.GetPathName())这条语句中的m_RichEdit的问题,没赋值就直接用了。
desiderata 2008-01-29
  • 打赏
  • 举报
回复
某个指针已经释放了,然后又被应用?
需要更多的上下文
xiefuming 2008-01-29
  • 打赏
  • 举报
回复
跟踪调试信息好像显示下面this语句那出错!可是我就是不知道问题出哪里?请高手指点!
LPOLECLIENTSITE lpClientSite;
this->GetIRichEditOle()->GetClientSite(&lpClientSite);
zhaokugua 2008-01-29
  • 打赏
  • 举报
回复
指针问题

65,199

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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