利用vc正在写一个类似vc编译环境的软件,但总提示断言失败导致程序无法运行,具体情况是当我运行的时候会弹出一个对话框提示我:vc98\MFC\SRC下文件dockstat.cpp第583行 debug assertion failed,dockstat.cpp第583行是这样的ASSERT(m_pContext!=NULL),dockstat.cpp是vc里带的文件我也不知道具体是什么问题,不知如何修改,请各位大侠指教。

解决方案 »

  1.   

    那就是 m_pContext 没对,看看传入的pContext 是什么,什么地方传入的。
      

  2.   

    Debug下打开call stack看看是哪个函数抛出异常的
      

  3.   

    m_pContext为空,问题不在dockstat.cpp中
      

  4.   

    错误只是指向dockstat.cpp中SetBarInfo()函数中ASSERT(m_pContext!=NULL),具体哪里调用这个函数我也找不到,我的程序里有很多类继承,估计是里面用到的可我找不到,也不知怎么找,能否提供下查找错误的思路,十分感谢
      

  5.   

    报这个红框就是因为m_pContext == NULL, ASSERT(条件) 表示括号里面的“条件”成立的时候,程序才继续往下走,当然,ASSERT是在debug模式下才有用,release是没用的。
      

  6.   

    这个问题你可以在debug模式下跑一遍,然后看看调用堆栈(不用打断点),看看是你的哪个函数调触发的。
      

  7.   


    你从“点击右键”开始找,是你的上下文菜单(右键菜单传指针出问题),从你的m_pContext名字也可猜是上下文菜单。
      

  8.   


    没有设置断点直接按F5运行,直接就跳到dockstat.cpp中SetBarInfo()函数中ASSERT(m_pContext!=NULL),看不到哪里调用
      

  9.   

    在调用堆栈中,看到自定义的函数有int CMainFrame::OnCreate()和InitInstance()。
    1.鼠标点击int CMainFrame::OnCreate()光标指向函数的最后return 0这里。
    2.鼠标点击InitInstance()光标指向函数中的
    if(!(pMainFrame-〉LoadFrame(IDR_MAINFRAME)))
    {
        return FALSE;
    }
    3.在调用堆栈中找到这两个函数同时还有一个库,库是自定义的,这个库是汇编代码
    另外:
    在int CMainFrame::OnCreate()函数的最后有这样几句代码如下:
    {
       CDockState dockState;
        dockState.LoadState(CONTROL_BARS);
       if(IsDockStateValid(dockState))
        {
           SetDockState(dockState);
        }
        return;
    }我在SetDockState(dockState)设置断点调试时,出现call stack unavailable while child is running 出现了上面很多问题,可无从下手到底问题出在哪里,本人很菜,请各位高手多多指教