程序运行时,时常出现上面的警告,按下“确定”,程序也会跟着关闭了。
也有的时候是在关闭程序时出现。不知道是怎么回事,望高手指点,多谢啦!!!

解决方案 »

  1.   

    1.用debug版本跟踪错误点,会提示你错误地方2.如果是release的话把崩溃注册了用MiniDumpWriteDump输出dmp文件去分析原因
      

  2.   

    VS对于DMP文件的支持做的非常好了。。之前都要用windbg分析的。。现在VS直接打开dmp文件,自动指向你崩溃点的语句,然后根据callstack可以查看你的代码崩溃点
      

  3.   

    访问越界
    要问具体原因那可就多了
    如果程序是你写的那就自己检查吧
    这个属于严重bug
    一定要排除
      

  4.   


    你好 这是指VS哪个版本而言,比如VC6编译的程序 用VS2010能分析吗?
      

  5.   

    “时常出现上面的警告”不是一定出现,找起来难些。一定要找到 那句 出错。出错时,“Retry”重试,
    看 调用堆栈, 找到 那条 在你的程序里的 语句,(别的 不要管)
      

  6.   

    出现上面也有两种情况:第一种就是正在运行过程中出现;第二种是关闭对话框时出现;刚才调试关闭对话框时出现了,问题停在dbgheap.c中的
    extern "C" static int __cdecl CheckBytes(
            unsigned char * pb,
            unsigned char bCheck,
            size_t nSize
            )
    {
            while (nSize--)
            {
                if (*pb++ != bCheck)
                {
                    return FALSE;
                }
            }
            return TRUE;
    }
      

  7.   

    CMulBoardFlashTool 是哪里的类?
      

  8.   


    是我自己写的类那它难道不是 你程序的代码么是我程序的代码......我程序名称就是MulBoardFlashTool
      

  9.   


    是我自己写的类那它难道不是 你程序的代码么是我程序的代码......我程序名称就是MulBoardFlashTool
    你看看 那个类的 display那个函数
      

  10.   

    是我自己写的类
    那它难道不是 你程序的代码么
    是我程序的代码......
    我程序名称就是MulBoardFlashTool出错的时候 看堆栈,双击display 看看执行到这个函数的哪一句 了。
      

  11.   

    是我自己写的类
    那它难道不是 你程序的代码么
    是我程序的代码......
    我程序名称就是MulBoardFlashTool出错的时候 看堆栈,双击display 看看执行到这个函数的哪一句 了。好的,多谢!!
      

  12.   

    个人猜测:根据贴出来的堆栈看, 你在定时器里调用了 UpdateData, 程序退出来的时候 可能定时器函数还没有执行完毕, 但是相应的控件已经被销毁了, 因此在关闭窗口前(如WM_DESTROY消息)先停止定时器, 并且等定时器函数执行完毕, 基本上就可以避免关闭时的奔溃问题, 或者是不要使用UpdateData来更新变量, 直接用SetWindowText SetDlgItemText等相应的函数代替
      

  13.   

    看到您的回复,我把updatedata给屏蔽掉了,结果又出现了异常如下图:所以我断定应该是GetDefaultCharFormat函数中的这句ASSERT弹出的异常,但是这个函数是系统函数,是什么导致的呢?我该怎么改呢?
      

  14.   

    看到您的回复,我把updatedata给屏蔽掉了,结果又出现了异常如下图:所以我断定应该是GetDefaultCharFormat函数中的这句ASSERT弹出的异常,但是这个函数是系统函数,是什么导致的呢?我该怎么改呢?为什么每次异常的地方还不一样呢?真令人郁闷......
      

  15.   

    是我自己写的类
    那它难道不是 你程序的代码么
    是我程序的代码......
    我程序名称就是MulBoardFlashTool出错的时候 看堆栈,双击display 看看执行到这个函数的哪一句 了。
    又出异常了,跟上次的不一样的地方,看上面回复贴,怎么改呢?
      

  16.   

    总共 4个 与你 程序 有关的。
    OnTimer
    AnalyliseBuf
    Position
    。。
    我 估计 AnalyliseBuf 有问题。
    断点到 AnalyliseBuf 然后 单步。
      

  17.   

    又出异常了,跟上次的不一样的地方,看上面回复贴,怎么改呢?
    系统函数也是 你程序里面 调用它了,还是你的程序错误的参数,或者错误的调用导致系统函数传入的参数不符合ASSERT所以报错,这个我也是菜鸟,看看别的高手们的说法,我说的是 我的经验
      

  18.   

    是我自己写的类
    那它难道不是 你程序的代码么
    是我程序的代码......
    我程序名称就是MulBoardFlashTool出错的时候 看堆栈,双击display 看看执行到这个函数的哪一句 了。
    又出异常了,跟上次的不一样的地方,看上面回复贴,怎么改呢?
    系统函数也是 你程序里面 调用它了,还是你的程序错误的参数,或者错误的调用导致系统函数传入的参数不符合ASSERT所以报错,这个我也是菜鸟,看看别的高手们的说法,我说的是 我的经验
      

  19.   

    AnalylseBuf在OnTimer中,Position在AnalyseBuf中,displayDevice2和display又是Position中的函数(这两个函数的功能相同),是一个往RichEdit控件中写字符串的函数.......因为这些函数都在OnTimer中不好单步啊,而且出异常不是一运行就出现的,是要运行一段时间才出现.......
      

  20.   

    不要 SetTimer (定时器 不开启)
    直接 反复 调用  OnTimer 
      

  21.   

    似乎找到问题所在了,就是在OnTimer()中只要操作某些riciedit控件(如 displayDeviceStatics()函数,但是display()函数没有屏蔽就没事,这是我苦恼的地方)或者其他控件就会出现异常,如果我把其中的控件操作屏蔽后就没问题了,但是为什么呢
      

  22.   

    但是如果是刚开始运行那段时间也是没问题的,运行时间长了,比如点击一下 单选框 控件 就可能会出来异常,这到底是什么原因呢?我屏蔽一些richedit控件,运行的时间就长些,刚才还以为没问题了,后来发现还是又异常了,还是pWnd有问题,鼠标放上去,显示的位置是设置richedit中的文字显示和字体的那个cpp,难道要放弃richedit的运用吗
      

  23.   

    “我屏蔽一些richedit控件,运行的时间就长些,刚才还以为没问题了,后来发现还是又异常了,还是pWnd有问题,鼠标放上去,显示的位置是设置richedit中的文字显示和字体的那个cpp,”
    说明白些
      

  24.   

    先前出现的堆栈信息为:
    我觉的应该是analyseBuf中的displayDeviceStatus2()函数的问题(这个函数就是在某条件下,向richedit框中写些提示信息),我就把用到的displayDeviceStatus2、displayDeviceStatus3...displayDeviceStatus5都屏蔽了,软件测试了五六个小时都没问题(我以为这下正常了吧,结果还是报异常了),屏蔽前基本上两个小时左右时就会报出异常,现在的异常时堆栈信息为: 其实出现位置还是一样,继续单步下去,在出现ASSERT pWnd时,发现pWnd还是跟RICHEDIT 的cpp中的displayDeviceStatus2()有关系,我都已经屏蔽了,为什么还会这样显示呢?(在OnTimer()之外也有displayDeviceStatus()但是测试时不会触发那个函数的执行的)
      

  25.   

    “设置richedit中的文字显示和字体的那个cpp”
    那么 你的 设置richedit中的文字显示和字体的函数在哪里?
      

  26.   

    在一个叫RichEditCtrlEx.CPP中,RichEditCtrl是它的基类,控件的控制变量类型本来是RichEditCtrl的,我给它变成RichEditCtrlEx的了,这样就可以直接调用其中函数了,其中函数实现为:
    void CRichEditCtrlEx::AddMessgaeText(CString strText,CString crFontName,UINT crFontSize,bool bIsBold,bool bIsItalic,bool bIsUnderline,COLORREF crColor)
    {
    SetSel(0, -1);
    //SendMessage(EM_SETSEL ,-2, -1); //将光标停到最后
    CHARFORMAT cf; ZeroMemory(&cf, sizeof(CHARFORMAT));
    cf.cbSize = sizeof(CHARFORMAT);
    cf.dwMask = CFM_BOLD | CFM_COLOR | CFM_FACE |CFM_ITALIC | CFM_SIZE | CFM_UNDERLINE ;

    if (bIsBold)
    cf.dwEffects|=CFE_BOLD;
    if (bIsItalic)
    cf.dwEffects |=CFE_ITALIC;
    if (bIsUnderline)
    cf.dwEffects |=CFE_UNDERLINE;
    cf.yHeight =crFontSize*15; 
    _stprintf(cf.szFaceName,crFontName);
    cf.crTextColor = RGB(0,0,0);
    //cf.crTextColor = crColor;
    //SetWordCharFormat(cf);
    SetSelectionCharFormat(cf);
    //设置缩进为400
    //long n_startindex,n_endindex;
    PARAFORMAT2 pf2;
    ZeroMemory(&pf2, sizeof(PARAFORMAT2));
    pf2.cbSize = sizeof(PARAFORMAT2);
    pf2.dwMask = PFM_STARTINDENT;
    pf2.dxStartIndent = 10;
    SetParaFormat(pf2);

    //GetSel(n_startindex,n_endindex);

    ReplaceSel(strText/*+_T("\r\n")*/);
    PostMessage(WM_VSCROLL,SB_LINEDOWN /*SB_BOTTOM*/, 0);//滚动条自动滚动到最后一行

    }
    然后CMultBoardFlashTool.cpp中写的是显示函数,如:
    void CMultBoardFlashToolDlg::displayDevice4(CString buffer)
    {
    //m_device4.UpdateData(TRUE);
    CHARFORMAT cf;
    m_device4.GetDefaultCharFormat(cf);  
    m_device4.AddMessgaeText(buffer,cf.szFaceName,cf.yHeight/15,(bool)(cf.dwEffects & CFE_BOLD),(bool)(cf.dwEffects & CFE_ITALIC),(bool)(cf.dwEffects & CFE_UNDERLINE),cf.crTextColor);

    }
    其中AddMessageTextGreen就是设置richedit字体显示格式的函数,
    然后就在 CMultBoardFlashToolDlg.cpp中四处调用。昨天把用到的这个的地方都屏蔽了,除了一个display没屏蔽,昨晚运行了一晚上都没出问题。但是上面的实现过程跟display中的m_infor是一样的,不知道什么原因.......现在应该说软件可以用了,大不了不用这个控件了,但是真不知道是什么原因耶
      

  27.   

    在一个叫RichEditCtrlEx.CPP中,RichEditCtrl是它的基类,控件的控制变量类型本来是RichEditCtrl的,我给它变成RichEditCtrlEx的了,这样就可以直接调用其中函数了,其中函数实现为:
    void CRichEditCtrlEx::AddMessgaeText(CString strText,CString crFontName,UINT crFontSize,bool bIsBold,bool bIsItalic,bool bIsUnderline,COLORREF crColor)
    {
    SetSel(0, -1);
    //SendMessage(EM_SETSEL ,-2, -1); //将光标停到最后
    CHARFORMAT cf; ZeroMemory(&cf, sizeof(CHARFORMAT));
    cf.cbSize = sizeof(CHARFORMAT);
    cf.dwMask = CFM_BOLD | CFM_COLOR | CFM_FACE |CFM_ITALIC | CFM_SIZE | CFM_UNDERLINE ;

    if (bIsBold)
    cf.dwEffects|=CFE_BOLD;
    if (bIsItalic)
    cf.dwEffects |=CFE_ITALIC;
    if (bIsUnderline)
    cf.dwEffects |=CFE_UNDERLINE;
    cf.yHeight =crFontSize*15; 
    _stprintf(cf.szFaceName,crFontName);
    cf.crTextColor = RGB(0,0,0);
    //cf.crTextColor = crColor;
    //SetWordCharFormat(cf);
    SetSelectionCharFormat(cf);
    //设置缩进为400
    //long n_startindex,n_endindex;
    PARAFORMAT2 pf2;
    ZeroMemory(&pf2, sizeof(PARAFORMAT2));
    pf2.cbSize = sizeof(PARAFORMAT2);
    pf2.dwMask = PFM_STARTINDENT;
    pf2.dxStartIndent = 10;
    SetParaFormat(pf2);

    //GetSel(n_startindex,n_endindex);

    ReplaceSel(strText/*+_T("\r\n")*/);
    PostMessage(WM_VSCROLL,SB_LINEDOWN /*SB_BOTTOM*/, 0);//滚动条自动滚动到最后一行

    }
    然后CMultBoardFlashTool.cpp中写的是显示函数,如:
    void CMultBoardFlashToolDlg::displayDevice4(CString buffer)
    {
    //m_device4.UpdateData(TRUE);
    CHARFORMAT cf;
    m_device4.GetDefaultCharFormat(cf);  
    m_device4.AddMessgaeText(buffer,cf.szFaceName,cf.yHeight/15,(bool)(cf.dwEffects & CFE_BOLD),(bool)(cf.dwEffects & CFE_ITALIC),(bool)(cf.dwEffects & CFE_UNDERLINE),cf.crTextColor);

    }
    其中AddMessageTextGreen就是设置richedit字体显示格式的函数,
    然后就在 CMultBoardFlashToolDlg.cpp中四处调用。昨天把用到的这个的地方都屏蔽了,除了一个display没屏蔽,昨晚运行了一晚上都没出问题。但是上面的实现过程跟display中的m_infor是一样的,不知道什么原因.......现在应该说软件可以用了,大不了不用这个控件了,但是真不知道是什么原因耶指向哪里拷贝读写 越界了的!或者引用了空指针的! 单步调试吧!
      

  28.   

    在一个叫RichEditCtrlEx.CPP中,RichEditCtrl是它的基类,控件的控制变量类型本来是RichEditCtrl的,我给它变成RichEditCtrlEx的了,这样就可以直接调用其中函数了,其中函数实现为:
    .......昨天把用到的这个的地方都屏蔽了,除了一个display没屏蔽,昨晚运行了一晚上都没出问题。但是上面的实现过程跟display中的m_infor是一样的,不知道什么原因.......现在应该说软件可以用了,大不了不用这个控件了,但是真不知道是什么原因耶指向哪里拷贝读写 越界了的!或者引用了空指针的! 单步调试吧!
    调试了N遍了,也看到堆栈中是哪儿出错了,但是......具体还是没搞清是哪儿出错?菜鸟啊!!
      

  29.   

    cf.dwEffects & CFE_ITALIC
    cf.dwEffects & CFE_UNDERLINE
    什么 意思 ?
    是要 还是 不要 ?细心调调, 应该可以 找到 问题。