我新建了一个MFC工程,client类是从CSocket继承下来的。
Debug调试的时候发现:给CSocketFile类型的指针变量(m_socketfile)分配空间的时候出现报错。
m_socketfile变量声明如下:
// Overrides
public:
CArchive * m_archiveout;
CArchive * m_archivein;
CSocketFile * m_socketfile;client:Init()函数体如下:void client::Init(CChatDlg *pDlg)
{
m_socketfile=new CSocketFile(this);
m_archivein=new CArchive(m_socketfile,CArchive::load);
m_archiveout=new CArchive(m_socketfile,CArchive::store);
}用Debug函数进行单步调试,发现是进入CRTMBOX.C后出现的报错,CRTMBOX.C里有这样的语句:
        if (pfnGetActiveWindow)
            hWndParent = (*pfnGetActiveWindow)();        if (hWndParent != NULL && pfnGetLastActivePopup)
            hWndParent = (*pfnGetLastActivePopup)(hWndParent);        return (*pfnMessageBoxA)(hWndParent, lpText, lpCaption, uType);调试的时候发现是第一个if条件成立,然后跳到return,再点下一步的时候,就弹出一个提示框,有如下的报错信息:debug assertion failed !

解决方案 »

  1.   

    你的这个函数Init是在哪里调用的?
      

  2.   

    是对话框类(CChatDlg)中的一个函数调用的void CChatDlg::ProcessPendingAccept()
    {
    client *pSocket;
    pSocket=new client();
    pSocket->Init(this);
    MessageBox("test5");
    //m_list+="\r\n有用户连接上";}ProcessPendingAccept()函数又被另外一个CSocket类(server)调用了。void server::OnAccept(int nErrorCode) 
    {
    // TODO: Add your specialized code here and/or call the base class
    m_list1=new CChatDlg();
    m_list1->ProcessPendingAccept();
    CSocket::OnAccept(nErrorCode);
    }m_list1是CChatDlg类的变量
      

  3.   

    create之后才能new CSocketFile