头大了,在Doc类的onopendocument中无法使用messagebox,大家帮忙找原因啊附代码解决办法

头大了,在Doc类的onopendocument中无法使用messagebox,大家帮忙找原因啊,附代码
问题陈述:
  项目背景:
  使用opencv,以及unicode,打开图像后进入onopendocument,
  使用了拆分窗口。

  onopendocument代码如下
C/C++ code
BOOL CCV_ExplorerDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
    /*if (!CDocument::OnOpenDocument(lpszPathName))
        return FALSE;*/
    // TODO:  Add your specialized creation code here
    
    //需要把unicode转化为char*,以使得cv中的函数可以正确调用
    const int BUFSIZE = 256;
    size_t   i;
    char      *filename = (char *)malloc( BUFSIZE );
    wcstombs_s(&i, filename, (size_t)BUFSIZE,     lpszPathName, (size_t)BUFSIZE );
    DeleteContents();
    BeginWaitCursor();

    m_img = cvLoadImage(filename,1);
    if (m_img == NULL)
    {
        m_csImg = CSize(0,0);
        m_bImgReady = FALSE;
        //下面的这个消息box一旦运行就会出错误,当然,注释掉运行就不会出错,错误报告为触发了断点
                  MessageBox(NULL,_T("这不是一个有效的图像文件"),_T("系统警告"),MB_OK);        
        return FALSE;
    }
    m_csImg = CSize(m_img->width,m_img->height);
    m_bImgReady = TRUE;
    
    EndWaitCursor();
    SetPathName(lpszPathName);
    SetModifiedFlag(TRUE);
         //下面的消息框运行会出错误,如果注释掉就不会debug出问题,这里的是测试用
         MessageBox(NULL,NULL,NULL,MB_OK);    UpdateAllViews(NULL,0L,NULL);
    return TRUE;
}

编译是没有问题的,但是一旦debug就不成了,一开始我还以为是由于unicode造成的,后来提示告诉我,**.exe触发了断点,跟进断点,发现为dbgrptt.c的
C/C++ code
/***
 *void _CrtDebugBreak - call OS-specific debug function
 *
 *Purpose:
 *       call OS-specific debug function
 *
 *Entry:
 *
 *Exit:
 *
 *Exceptions:
 *
 *******************************************************************************/

#undef _CrtDbgBreak

/* These methods don't need a separate
   wchar version. Hence they need to be compiled only once from
   the original file */

_CRTIMP void _cdecl _CrtDbgBreak(
    void
    )
{
    DebugBreak();
}

这是因为什么做成的呢?百思不得其解,请高手出主意解决

------解决方案--------------------
你那malloc申请的内存没有释放
你把messagebox换成afxmessagebox看看
------解决方案--------------------
应该是这个程序的某个地方跟这个messagebox会产生冲突
出现断言的时候,点击重试可以大概定位
以前也曾将碰到过,当时是由于设置定时器产生的,
afxmessagebox也不可以用,不知道你这边可用不?
------解决方案--------------------
不要怀疑messagebox了,这个是绝对不会有问题
一般相当变态的问题,大多数是其他地方的内存越界引起的,这是检查的重点
------解决方案--------------------
注意new出来的对象问题,尤其注意ondraw里面的。


------解决方案--------------------
vvvvvvvvvvvvvvvvvvvvvvv
------解决方案--------------------
直觉好像是,你的程序某处那里有申请内存,但是访问越界,并且删除这段内存导致。
越界有时候并不是会直接Crash。
------解决方案--------------------
那是什么问题产生的??
------解决方案--------------------
探讨
呵呵 ,问题解决了,基本上没有人答对问题

------解决方案--------------------
不会是手工调用OnDraw而此时窗口还没初始化完成吧?
------解决方案--------------------
什么问题,分享一下吧