wxWidgets向导示例运行时崩溃

时间:2015-12-14 15:36:21

标签: c++ crash wxwidgets wizard sample

完整的代码超过400行。您可以在此处找到它:http://hostcode.sourceforge.net/view/4122或者如果您安装了wxwidgets,则在 WX_WIDGETS_ROOT \ samples \ wizard \ wizard.cpp 下。

我试着编译但得到了 "错误C2065:' m_bitmap' :未声明的标识符"在第122行。

然后我评论了那条线并且编译好了。但是当我运行它并选择其中一个菜单命令时:

  • 文件>>运行向导模式
  • 文件>>使用sizer运行向导
  • 文件>> 运行向导无模式

它转到MyWizard构造函数并在m_page1 = new ... line崩溃。

MyWizard::MyWizard(wxFrame *frame, bool useSizer)
    : wxWizard(frame,wxID_ANY,_T("Absolutely Useless Wizard"),
    wxBitmap(wiztest_xpm),wxDefaultPosition,
    wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
{
    // a wizard page may be either an object of predefined class
    m_page1 = new wxWizardPageSimple(this);<---------------- HERE

并给出了这个错误:

  

wizard.exe中0x004425ec处的未处理异常:0xC0000005:Access   违规读取位置0xcdcdcdd1。

我检查了调试器并看到它转到了

void wxWizardPage::Init()
{
    m_bitmap = wxNullBitmap;<--- HERE
}

然后一些内部调用后来尝试访问m_refData-&gt; m_count,其中m_refData包含垃圾m_refData = 0xcdcdcdcd {m_count = ???然后坠毁了。

void wxObject::UnRef()
{
    if ( m_refData )
    {
        wxASSERT_MSG( m_refData->m_count > 0, _T("invalid ref data count") );<----- HERE

        if ( --m_refData->m_count == 0 )
            delete m_refData;
        m_refData = NULL;
    }
}

这是调用堆栈,如果有用的话:

  

wizard.exe!wxObject :: UnRef()第346行+ 0x6字节C ++     wizard.exe!wxObject :: Ref(const wxObject&amp; clone)第335行C ++     wizard.exe!wxObject :: operator =(const wxObject&amp; other)Line 428 C ++     wizard.exe!wxGDIObject :: operator =(const wxGDIObject&amp; __that)+ 0x13   bytes C ++ wizard.exe!wxGDIImage :: operator =(const wxGDIImage&amp;   __that)+ 0x13字节C ++ wizard.exe!wxBitmap :: operator =(const wxBitmap&amp; __that)+ 0x13 bytes C ++

     
    

wizard.exe!wxWizardPage :: Init()第126行C ++ wizard.exe!wxWizardPage :: wxWizardPage()第50行+ 0x46字节C ++       wizard.exe!wxWizardPageSimple :: wxWizardPageSimple(wxWizard * parent,     wxWizardPage * prev,wxWizardPage * next,const wxBitmap&amp;位图,     const char * resource)第113行+ 0x2e字节C ++       wizard.exe!MyWizard :: MyWizard(wxFrame * frame,bool useSizer)Line     376 + 0x31字节C ++

  

0 个答案:

没有答案