Posted on 2009-04-02 19:10
S.l.e!ep.¢% 閱讀(2141)
評(píng)論(4) 編輯 收藏 引用 所屬分類:
WinDbg
內(nèi)存崩潰的BUG
內(nèi)存崩潰的BUG (2)
內(nèi)存崩潰的BUG (3)
連續(xù)三天在跟蹤同個(gè)問(wèn)題!!!!!!!!
今天重現(xiàn)了幾次問(wèn)題,都是下面的原因?qū)е碌摹?br />
首先要說(shuō)下IOCP的實(shí)現(xiàn)
下面的發(fā)送包時(shí)的代碼
-------------------------------------------------------------------------
PER_IO_CONTEXT* overlappedEx=new PER_IO_CONTEXT
overlappedEx->IOOperation= WRITE;
overlappedEx->wsabuf.buf= (char *)malloc( nLen );
if( NULL == overlappedEx->wsabuf.buf )
{
delete overlappedEx;
return -1;
}
if(WSASend(m_socket,&(overlappedEx->wsabuf), 0x01, &dwBytes, 0x00, &(overlappedEx->Overlapped), NULL ) == SOCKET_ERROR)
-------------------------------------------------------------------------
下面是完成端口通知時(shí)的處理代碼
-------------------------------------------------------------------------
?while (m_bIsRun)
?{
??result = GetQueuedCompletionStatus(m_hCompletionPort,&iosize,&key,&overlapped,INFINITE);
??if ( 0 == key )?
??{
???break;
??}
??if( NULL != overlappedEx )
??{
???if ( WRITE == overlappedEx->IOOperation )
???{???
????delete overlappedEx;
????continue;
???}
}
……
}
-------------------------------------------------------------------------
之后在?????delete overlappedEx; 前面用 OutPutDebugString 打印了調(diào)試信息, 發(fā)現(xiàn)在?
?delete overlappedEx; 執(zhí)行后
WSASend 里面還會(huì)訪問(wèn)到? overlappedEx 下面的??Overlapped,結(jié)果就在 WSASend 出錯(cuò)了
overlappedEx 的結(jié)構(gòu)體定義如下:
struct PER_IO_CONTEXT
{
?WSAOVERLAPPED????Overlapped;
?WSABUF????????????????????? wsabuf;
?IO_OPERATION?????????IOOperation;
};
查了下 MSDN? WSASend 函數(shù)的說(shuō)明,無(wú)頭緒,明天繼續(xù)