2012-10-04 2 views
0

내 MFC SDI 응용 프로그램에서 내 문서를 저장하려면 CDocument :: DoSave 재정의하려고합니다. 3 단계 구성 요소 (TxTextControl)를 사용하여 텍스트 컨트롤을 작성하고 있습니다. 문서를 저장할 때 파일이 만들어 지지만 약 1 분 후에 내 응용 프로그램이 올 액세스 오류 0xFEEEFEEE, ole32.dll에서 충돌합니다.mfc sdi 응용 프로그램 cdocument dosave 오류 0xFEEEFEEE

입니다

이 문제가 온다 해제 힙 메모리를 표시하기 위해 마이크로 소프트의 HeapFree (에서 사용

FEEEFEEE) :

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

Magic debug values : 이 내 코드, txtCtrl 내 구성 요소입니다 그 코드는 아직 살아있는 것처럼 공개 된 메모리를 다룬다. 특정 코드 조각으로 문제를 격리하려면 예외시 호출 스택 정보를 디버깅하고 사용하십시오.

+0

호출 스택은 ole32.dll! 7734c99e()에서 끝나고 디스 어셈블리에서 해체는 다음과 같습니다. 7734C99E mov ecx, dword ptr [eax] –

+0

EAX 값은 FEEEFEEE –

+0

입니다. 내 코드에서 문제를 어떻게 찾을 수 있습니까? ? –

관련 문제