• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            S.l.e!ep.¢%

            像打了激速一樣,以四倍的速度運轉,開心的工作
            簡單、開放、平等的公司文化;尊重個性、自由與個人價值;
            posts - 1098, comments - 335, trackbacks - 0, articles - 1
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            內存崩潰的BUG
            內存崩潰的BUG (2)
            內存崩潰的BUG (3)

            連續三天在跟蹤同個問題!!!!!!!!

            今天重現了幾次問題,都是下面的原因導致的。

            首先要說下IOCP的實現

            下面的發送包時的代碼
            -------------------------------------------------------------------------
            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)
            -------------------------------------------------------------------------


            下面是完成端口通知時的處理代碼
            -------------------------------------------------------------------------
            ?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 打印了調試信息, 發現在?
            ?delete overlappedEx; 執行后

            WSASend 里面還會訪問到? overlappedEx 下面的??Overlapped,結果就在 WSASend 出錯了

            overlappedEx 的結構體定義如下:

            struct PER_IO_CONTEXT
            {
            ?WSAOVERLAPPED????Overlapped;
            ?WSABUF????????????????????? wsabuf;
            ?IO_OPERATION?????????IOOperation;
            };


            查了下 MSDN? WSASend 函數的說明,無頭緒,明天繼續

            Feedback

            # re: 內存崩潰的BUG (4) 完成端口的問題? 程序的BUG?[未登錄]  回復  更多評論   

            2009-04-02 19:48 by cppexplore
            .............................
            內存檢測工具跑一遍就能發現的問題,你還真執著啊。

            # re: 內存崩潰的BUG (4) 完成端口的問題? 程序的BUG?  回復  更多評論   

            2009-04-07 13:14 by freeeyes
            推薦你使用完全端口的時候,一定要注意判空操作。
            如果我是你的話,就這么寫。
            while (m_bIsRun)
            {
            result = GetQueuedCompletionStatus(m_hCompletionPort,&iosize,&key,&overlapped,INFINITE);
            if ( 0 == key )
            {
            break;
            }
            if( NULL != overlappedEx )
            {
            if ( WRITE == overlappedEx->IOOperation )
            {
            delete overlappedEx;
            overlappedEx = NULL;
            continue;
            }
            }

            而且在使用Send的同時,可能會出現這樣的情況。就是你發送的Send數據還在緩沖區的時候,你的overlappedEx對象被釋放,造成的內存崩潰的現象。我的做法是增加一些數據鎖。同時,在要刪除overlappedEx的時候,先判定寫標志是否在進行。如果有做一個定時器,延時幾秒刪除對象(將對象放入刪除隊列),這樣似乎比較好。ACE下的思想也是這樣的。
            另外,我不太明白你為什么要在WRITE == overlappedEx->IOOperation 的時候進行刪除對象操作?

            # re: 內存崩潰的BUG (4) 完成端口的問題? 程序的BUG?  回復  更多評論   

            2009-04-20 23:07 by hearts
            我也遇到了這個問題。樓主發現的是對的。也是不知道為什么。只好對overlapped進行引用計數。問題倒是解決了,不過覺得做法很丑陋。不知道有沒有好的解決辦法。可能HasOverlappedCompleted有些幫助

            # re: 內存崩潰的BUG (4) 完成端口的問題? 程序的BUG?  回復  更多評論   

            2009-10-17 13:47 by FreeChord
            delete overlappedEx;

            這塊內存(buf)沒free啊!
            overlappedEx->wsabuf.buf= (char *)malloc( nLen );
            新狼窝色AV性久久久久久| 久久人人添人人爽添人人片牛牛| 久久综合鬼色88久久精品综合自在自线噜噜 | 久久久久久综合网天天| 无码人妻少妇久久中文字幕蜜桃| 婷婷久久久亚洲欧洲日产国码AV| 久久99国产精品久久99| 久久国产精品二国产精品| 欧美黑人激情性久久| 无码国内精品久久人妻| 久久精品无码一区二区日韩AV| 国产精品久久久久久久app| 99久久人妻无码精品系列蜜桃| 久久久久久久久久免免费精品| 伊人久久大香线蕉综合影院首页| 亚洲欧美日韩精品久久| 国内精品伊人久久久久777| 国产精品永久久久久久久久久| 久久久久久久久无码精品亚洲日韩| 国产精品成人99久久久久| 精品国产乱码久久久久软件| 久久久九九有精品国产| 99精品国产综合久久久久五月天| 亚洲AV无码久久精品成人 | 久久精品国产亚洲AV麻豆网站| 久久综合九色欧美综合狠狠| 久久97精品久久久久久久不卡| 亚洲国产另类久久久精品| 欧美激情精品久久久久久| 欧美亚洲国产精品久久蜜芽 | 蜜臀av性久久久久蜜臀aⅴ麻豆| 一级a性色生活片久久无| 青草久久久国产线免观| 久久国产成人| 久久精品国产色蜜蜜麻豆| 久久综合狠狠色综合伊人| 久久精品嫩草影院| 亚洲国产天堂久久综合网站| 99久久国产综合精品成人影院| 亚洲精品高清国产一线久久| 性欧美丰满熟妇XXXX性久久久|