高手帮帮忙,程序执行过程中那个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文件,我都没有删除任何东西啊,为什么会出错呢?
------------------------------------------
对了,执行出错的函数是我自定义的一个消息处理函数
,下面就是这个系统cpp,说这个cpp是搞什么界面对象释放的,可是为什么出错啊,谢谢了!
-------------------------------------
void CHandleMap::DeleteTemp()
{
......
CObject* pTemp;
......
delete pTemp;// virtual destructor does the right thing
m_temporaryMap.RemoveAll();
}
-------------
上面这个是一个系统的cpp文件,我都没有删除任何东西啊,为什么会出错呢?
------------------------------------------
对了,执行出错的函数是我自定义的一个消息处理函数
(我的窗口是一个非主窗口(dialog类)继承下来的
不说情况了,希望有大虾帮我解答解答这个出错是由于什么原因产生的就行了
{
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;
}
我是写的一个用消息机制实现socket的异步通信的程序
上面的代码就是消息处理代码并没有多线程啊我的这个窗体是在主窗体里面创建的,创建代码为:
if(!ptcDlg)
{
ptcDlg = new CTransferConfigDlg();
ptcDlg->Create(IDD_TANSCONFIG_DIALOG);
}
ptcDlg->ShowWindow(SW_NORMAL);
这个窗体创建后,即使客户机socket建立好了连接(上面的FD_ACCEPT消息已经触发),只要没有触发FD_READ消息,都不会出现上面的问题,可是一旦触发了FD_READ消息,就出现错误了,我再看看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
}
{
// 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;
...........................
----------------------------------------------------
请问为何加上上面三个指针连程序主窗口都显示不出来了呢?郁闷