高手帮帮忙,程序执行过程中那个WINHAND.CPP的delete pTemp出错,每次都卡到哪儿,请问为什么!!!!!!!!!!!!紧急情况,情高手救济啊,怎么我的应用程序老是出现在WINHAND.CPP文件的 delete pTemp上面啊??
,下面就是这个系统cpp,说这个cpp是搞什么界面对象释放的,可是为什么出错啊,谢谢了!
-------------------------------------
void CHandleMap::DeleteTemp()

                  ......
CObject* pTemp;
                  ......
delete pTemp;// virtual destructor does the right thing
                 m_temporaryMap.RemoveAll();  
}
-------------
上面这个是一个系统的cpp文件,我都没有删除任何东西啊,为什么会出错呢?
------------------------------------------
对了,执行出错的函数是我自定义的一个消息处理函数

解决方案 »

  1.   

    pTemp这个指针已经无效了吧?
      

  2.   

    ydfivy(我就是一送外卖的)我晕,我都不知道那个指针指的什么啊,郁闷最新情况好像就是 我激活窗口或者移动窗口就出错选择忽略以后一会再移动又出错
    (我的窗口是一个非主窗口(dialog类)继承下来的
      

  3.   

    情况再通报:当开始消息处理后:激活窗口就报错,选择终止就终止在上面的那个delete操作激活并忽略错误以后,可以拖动窗口窗口一次不出错,拖动第二次肯定报错如此反复但是窗体其他执行函数包括按钮事件完全可以正常执行,why????唉,高不懂,没开始消息处理又不会出错,算了,
    不说情况了,希望有大虾帮我解答解答这个出错是由于什么原因产生的就行了
      

  4.   

    句柄问题,没有恢复句柄吧,是不是dll中出现的问题?
      

  5.   

    LRESULT CTransferConfigDlg::OnSockData(WPARAM wp,LPARAM lp)
    {
    if((lp==0)&&(wp==0))
    {
    MessageBox("SOCKET参数初始化错误!");
    return 0;
    }
    int cursock = (int)wp;
    //int datatype,len;
    int mymsg = WSAGETSELECTEVENT(lp);
    /////////////////////////////////////////
    //fetch the socket object that posts the message
    ///////////////////////////////////////////
    if((sockforpcap.pwnd!=NULL)&&((sockforpcap.sockwork==cursock)||(sockforpcap.sockser==cursock)))
    {
    switch(mymsg){
    case FD_READ:
    if(pcapdata)
    {
    pcapdata = !pcapdata;
    sockforpcap.recvdata(pdataflag.datatype,buff,pdataflag.datalength);
    HandleData(pdataflag.datatype,buff,pdataflag.datalength);
    }
    else
    {
    pcapdata = !pcapdata;
    sockforpcap.recvflag(pdataflag.datatype,pdataflag.datalength);
    }
    break;
    case FD_ACCEPT:
    sockforpcap.acceptTcp();
    break;
    case 0: //error occured
    MessageBox(sockforpcap.getErrMessage());
    break;
    default:
    break;
    }
    }
    else if((sockforother.pwnd!=NULL)&&((sockforother.sockwork==cursock)||(sockforother.sockser==cursock)))
    {
    switch(mymsg){
    case FD_READ:
    //sockforother.recvdata(datatype,buff,len);
    //HandleData(datatype,buff,len);
    //delete buff;
    //MessageBox(buff);
    break;
    case FD_ACCEPT:
    sockforother.acceptTcp();
    break;
    case 0: //error occured
    MessageBox(sockforother.getErrMessage());
    break;
    default:
    break;
    }
    }
    else if((sockforcenter.pwnd!=NULL)&&((sockforcenter.sockwork==cursock)||(sockforcenter.sockser==cursock)))
    {
    switch(mymsg){
    case FD_READ:
    //sockforcenter.recvdata(datatype,buff,len);
    //HandleData(datatype,buff,len);
    //delete buff;
    //MessageBox(buff);
    break;
    case FD_ACCEPT:
    sockforcenter.acceptTcp();
    break;
    case 0: //error occured
    MessageBox(sockforcenter.getErrMessage());
    break;
    default:
    break;
    }
    }
    else //must be error occurd
    return 1;
    return 0;
    }
      

  6.   

    没有啊
    我是写的一个用消息机制实现socket的异步通信的程序
    上面的代码就是消息处理代码并没有多线程啊我的这个窗体是在主窗体里面创建的,创建代码为:
    if(!ptcDlg)
    {
    ptcDlg = new CTransferConfigDlg();
    ptcDlg->Create(IDD_TANSCONFIG_DIALOG);
    }
    ptcDlg->ShowWindow(SW_NORMAL);
    这个窗体创建后,即使客户机socket建立好了连接(上面的FD_ACCEPT消息已经触发),只要没有触发FD_READ消息,都不会出现上面的问题,可是一旦触发了FD_READ消息,就出现错误了,我再看看FD_READ消息不做任何操作会不会出现上面的情况
      

  7.   

    经过测试,即使触发消息FD_READ也不会出现错误
    可是一旦执行FD_READ消息下面的函数
    sockforpcap.recvdata(pdataflag.datatype,buff,pdataflag.datalength);
    就出错了....
    sockforpcap是我定义的socket类,类的初始化过程中用到了这个窗口的HWND,即this->GetSafeWnd();
    pdataflag为一个结构体,用户返回数据类型及其socket发送数据长度
    recvdata函数为:
    int mySocket::recvdata(int &datatype,char*&buff, int &len)
    //int mySocket::recvall(int &datatype,int &len)
    {
    int ret;
    int deslen;
    //if this is a tcp socket
    if(socktype!=UDP)
    {    
    if(len>BUFFSIZE)
    realloc(data,sizeof(len+1));
    ret = recv(sockwork,data,len,0);
    *(data+len)='\0';
    if(ret<=0){
    ltoa((long)WSAGetLastError(),errnumber,10);
    strcpy(sockerrbuf,"接收数据失败:");
    strcat(sockerrbuf,errnumber);
    throwError();
    return 1;
    }

    }
             else{....}
             buff = data; //buf为一个指针,data是mysocket类的一个缓冲区
             return 0
    }
      

  8.   

    class CMyAprioriDlg : public CDialog
    {
    // Construction
    public:
    int HandleData(int datatype,char*buf,int len);
    int startPcapRecv();
    myList *List1; //used for just test
    CMyAprioriDlg(CWnd* pParent = NULL);// standard constructor CTransferConfigDlg *ptcDlg;
    ////////////////////////////////////////////////////////////////
    //SOKET相关操作变量
    ////////////////////////////////////////////
    //针对三类通信创建三个socket对象
    mySocket *sockforpcap;
    mySocket *sockforother;
    mySocket *sockforcenter;
            ...........................
    ----------------------------------------------------
    请问为何加上上面三个指针连程序主窗口都显示不出来了呢?郁闷