mfc sdi应用程序cdocument dosave错误0xFEEEFEEE

时间:2012-10-04 07:49:13

标签: c++ winapi visual-c++ mfc

在我的MFC SDI应用程序中,我试图覆盖CDocument :: DoSave来保存我的文档。我使用第三方组件(TxTextControl)来构建文本控件。当我保存文档时,文件已创建,但大约一分钟后,我的应用程序崩溃了ole32.dll中的读取访问错误0xFEEEFEEE。 这是我的代码,txtCtrl是我的组件:

BOOL CEditorTxDoc::DoSave(LPCTSTR lpszPathName, BOOL bReplace)
{
CString path, nome;
VARIANT vt1, vt2, vt3;
POSITION pos = GetFirstViewPosition();
CEditorTxView *pView = (CEditorTxView*)this->GetNextView(pos);

VariantInit(&vt1);
vt1.vt = VT_INT;
vt1.intVal = -1;
VariantInit(&vt2);
vt2.vt = VT_INT;
vt2.intVal = 3;
VariantInit(&vt3);
vt3.vt = VT_BOOL;
vt3.boolVal = FALSE;

if (lpszPathName == NULL) {
    CFileDialog fSaveDlg(FALSE);

    fSaveDlg.m_pOFN->lpstrFilter = _T("File Tx (*.tx)");
    fSaveDlg.m_pOFN->lpstrDefExt = _T("tx");
    fSaveDlg.m_pOFN->lpstrTitle = _T("Salva documento");
    fSaveDlg.m_pOFN->lpstrInitialDir = _T("c:");

    if(fSaveDlg.DoModal()==IDOK)
    {
        path = fSaveDlg.GetPathName();
        nome = fSaveDlg.GetFileName();

        pView->txtCtrl.Save(path, vt1, vt2, vt3);
        SetTitle(nome);
        SetModifiedFlag(FALSE);
        SetPathName(path);
    }
} else {
        pView->txtCtrl.Save(GetPathName(), vt1, vt2, vt3);
        SetModifiedFlag(FALSE);
}

return TRUE;
}

1 个答案:

答案 0 :(得分:1)

Magic debug values

  

FEEEFEEE由Microsoft的HeapFree()用于标记释放的堆内存

也就是说,问题来自这样一个事实,即代码处理已释放的内存,就好像它仍处于活动状态一样。要将问题隔离到特定代码片段,请在异常时调试和使用调用堆栈信息。