Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Ошибка Unhandled exception


Автор: XSonicX 21.2.2011, 02:42
Здавствуйте! Ни с того ни ссего сегодня запускаю проект, пытаюсь его прокомпилить. Все проходит удачно, но программа сразу при запуске выдает ошибку 
Цитата

Warning: Destroying non-NULL m_pMainWnd
First-chance exception at 0x00c45379 in determinant.exe: 0xC0000005: Access violation reading location 0xfefeff66.
Unhandled exception at 0x00c45379 in determinant.exe: 0xC0000005: Access violation reading location 0xfefeff66.


Указывает на кусок кода в winmain.cpp
Код

// Perform specific initializations
    if (!pThread->InitInstance())
    {
        if (pThread->m_pMainWnd != NULL)
        {
            TRACE(traceAppMsg, 0, "Warning: Destroying non-NULL m_pMainWnd\n");
            pThread->m_pMainWnd->DestroyWindow(); // На эту строчку
        }
        nReturnCode = pThread->ExitInstance();
        goto InitFailure;
    }
    nReturnCode = pThread->Run();



Программа очень проста. Вот основной код:
Код

void CdeterminantDlg::OnBnClickedButton1()
{
    UpdateData(true);
    int ii=m_tab.GetCurSel();
    if(int_solve==0)
    {
        delta=a1*b2*c3+b1*c2*a3+c1*a2*b3-c1*b2*a3-b1*a2*c3-a1*c2*b3;
        
        if(ii==0)
        {
            c_delta.ModifyStyle(ES_READONLY, 0,SWP_FRAMECHANGED);
            dx=d1*b2*c3+b1*c2*d3+c1*d2*b3-c1*b2*d3-b1*d2*c3-d1*c2*b3;
            dy=a1*d2*c3+d1*c2*a3+c1*a2*d3-c1*d2*a3-d1*a2*c3-a1*c2*d3;
            dz=a1*b2*d3+b1*d2*a3+d1*a2*b3-d1*b2*a3-b1*a2*d3-a1*d2*b3;
            x=dx/delta;
            y=dy/delta;
            z=dz/delta;
            if (delta,dx,dy,dz==0)
            {
                 MessageBox(_T("System is undefined."),_T("Error"),MB_OK);
            }
            else
            {
                if ((dx==0||dy==0||dz==0)&&delta==0)
                {
                     MessageBox(_T("System is incompatible."),_T("Error"),MB_OK);
                }
            }
        }
    }
    else
    {
        if(ii==1)
        {
            if(delta==(a1*b2*c3+b1*c2*a3+c1*a2*b3-c1*b2*a3-b1*a2*c3-a1*c2*b3))
            {    
                 MessageBox(_T("Correct answer!"),_T("Congradulations"),MB_OK);
            }
            else
            {
                 MessageBox(_T("Answer is NOT correct! Try again."),_T("Error"),MB_OK);
            }
        }
        int m=0;
        if(ii==0)
        {
            if(delta!=(a1*b2*c3+b1*c2*a3+c1*a2*b3-c1*b2*a3-b1*a2*c3-a1*c2*b3)) m++;
            if(dx!=(d1*b2*c3+b1*c2*d3+c1*d2*b3-c1*b2*d3-b1*d2*c3-d1*c2*b3)) m++;
            if(dy!=(a1*d2*c3+d1*c2*a3+c1*a2*d3-c1*d2*a3-d1*a2*c3-a1*c2*d3)) m++;
            if(dz!=(a1*b2*d3+b1*d2*a3+d1*a2*b3-d1*b2*a3-b1*a2*d3-a1*d2*b3)) m++;
            //if(x!=(d1*b2*c3+b1*c2*d3+c1*d2*b3-c1*b2*d3-b1*d2*c3-d1*c2*b3)/(a1*b2*c3+b1*c2*a3+c1*a2*b3-c1*b2*a3-b1*a2*c3-a1*c2*b3))m++;
            //if(y!=(a1*d2*c3+d1*c2*a3+c1*a2*d3-c1*d2*a3-d1*a2*c3-a1*c2*d3)/(a1*b2*c3+b1*c2*a3+c1*a2*b3-c1*b2*a3-b1*a2*c3-a1*c2*b3))m++;
            //if(z!=(a1*b2*d3+b1*d2*a3+d1*a2*b3-d1*b2*a3-b1*a2*d3-a1*d2*b3)/(a1*b2*c3+b1*c2*a3+c1*a2*b3-c1*b2*a3-b1*a2*c3-a1*c2*b3))m++;
            if(m==0) MessageBox(_T("All answers are correct!"),_T("Congradulations"),MB_OK);
            if(m==1) MessageBox(_T("Answers are NOT correct. You have 1 mistake."),_T("Error"),MB_OK);
            if(m==2) MessageBox(_T("Answers are NOT correct. You have 2 mistakes."),_T("Error"),MB_OK);
            if(m==3) MessageBox(_T("Answers are NOT correct. You have 3 mistakes."),_T("Error"),MB_OK);
            if(m==4) MessageBox(_T("Answers are NOT correct. You have 4 mistakes."),_T("Error"),MB_OK);
            if(m==5) MessageBox(_T("Answers are NOT correct. You have 8 mistakes."),_T("Error"),MB_OK);
            if(m==6) MessageBox(_T("Answers are NOT correct. You have 6 mistakes."),_T("Error"),MB_OK);
            if(m==7) MessageBox(_T("Answers are NOT correct. You have 7 mistakes."),_T("Error"),MB_OK);
        }

    }


    UpdateData(false);
}

void CdeterminantDlg::OnBnClickedButton2()
{
    UpdateData(true);
    delta=0;
    dx=0;
    dy=0;
    dz=0;
    x=0;
    y=0;
    z=0;
    a1=0;
    a2=0;
    a3=0;
    b1=0;
    b2=0;
    b3=0;
    c1=0;
    c2=0;
    c3=0;
    d1=0;
    d2=0;
    d3=0;
    UpdateData(false);
}

void CdeterminantDlg::OnTcnSelchangeTab2(NMHDR *pNMHDR, LRESULT *pResult)
{

    int ii=m_tab.GetCurSel();
    sheet1.ShowWindow(ii==1? SW_SHOW : SW_HIDE);
    sheet2.ShowWindow(ii==1? SW_SHOW : SW_HIDE);

    // TODO: Add your control notification handler code here
    *pResult = 0;
}

void CdeterminantDlg::OnBnClickedRadio2()
{
    int_solve=1;
        c_dx.SetReadOnly(false);
        c_dy.SetReadOnly(false);
        c_dz.SetReadOnly(false);
        c_x.SetReadOnly(false);
        c_y.SetReadOnly(false);
        c_z.SetReadOnly(false);
        c_delta.SetReadOnly(false);
    UpdateData(false);
    // TODO: Add your control notification handler code here
}

void CdeterminantDlg::OnBnClickedRadio1()
{    
    int_solve=0;
        c_dx.SetReadOnly(true);
        c_dy.SetReadOnly(true);
        c_dz.SetReadOnly(true);
        c_x.SetReadOnly(true);
        c_y.SetReadOnly(true);
        c_z.SetReadOnly(true);
        c_delta.SetReadOnly(true);
    UpdateData(false);
    // TODO: Add your control notification handler code here
}



Пытался убирать все внутринности кнопок в комменты с помощью /*...*/  но в итоге ничего не изменилось. smile 
Помогите пожалуйста.  

Автор: Cheloveck 21.2.2011, 11:10
XSonicX, в InitInstance класса приложения нужно присвоить указателю m_pMainWnd указатель на твоё главное окно. Ты это сделал?

Автор: XSonicX 21.2.2011, 16:39
Cheloveck, я ничего такого вообще не делал! В том то и дело как бы у меня все работало замечательно до определенного момента.. И т.к это случилось "само по себе" я не знаю в чем моя вина или ошибка..  Как мне посмотреть 
Цитата

в InitInstance класса приложения нужно присвоить указателю m_pMainWnd указатель на твоё главное окно

 Сделал ли я это или нет?

Автор: Earnest 21.2.2011, 17:35
XSonicX, кто тебе мешает поставить точку прерывания на InitInstance и посмотреть, почему возвращается false? Ты ведь написал "сразу при запуске", так что проблема явно в этом: почему-то не хочет твой объект-приложение инициализироваться.

Добавлено через 2 минуты и 4 секунды
Хотя, InitInstance может возвращать false, если приложение диалоговое. Но тогда никакого ненулевого m_pMainWnd быть не должно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)