日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

http://blog.sina.com.cn/s/blog_458f3c010100n4st.html

發布時間:2025/3/21 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 http://blog.sina.com.cn/s/blog_458f3c010100n4st.html 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
從來不寫技術文章,因為沒辦法描述清楚觀點。我一直認為,無法向別人解釋清楚為什么的原因,一定在于自己還不是徹底地理解。拿出來說,不異于害人害已。這兩天弄一個mfc的小程序,出了點問題,google了下,也只有提問的沒找到回答。 ???其實對于mfc,在其快老掉牙時,因為日常不怎么用,也始終是一知半解。就當下山來害回人吧。 ??現象:vs2005新建一個console的程序,并調用AfxSocketInit(),會有memory leak. leak 的出處是sockcore.cpp中的 ???????? #ifndef_AFXDLL
??????????????????????pThreadState->m_pmapSocketHandle =new CMapPtrToPtr;
??????????????????????pThreadState->m_pmapDeadSockets =new CMapPtrToPtr;
???????????????????????pThreadState->m_plistSocketNotifications= new CPtrList; ??????????#endif ???很明顯這個問題只會在使用靜態mfc庫鏈接時才會發生。事實上這三塊空間會在afxstate.cpp中的~AFX_MODULE_THREAD_STATE()中被刪除,只是這個析構也沒被調用。 ????本來這個析構應該是被appmodul.cpp中的_AfxTermAppState()函數調用,這個函數也是只有在靜態鏈接mfc庫時才會被調用,因為它只有在 ?????????#fndef _AFXDLL
???????????????????????char _afxInitAppState = (char)(AfxInitialize(FALSE, _MFC_VER),atexit(&_AfxTermAppState));
??????????#else
???????????????????????char _afxInitAppState = (char)(AfxInitialize(FALSE,_MFC_VER));
???????????#endif 時才會在程序結束時調用。 ?????出問題的就在_afxInitAppState,在console程序中它不會被調用,而在windows程序中才會被調用。應該在項目屬性中哪里可以設置。_afxInitAppState應該是這個函數列表里的一項__xc_a ~__xc_z,他們是在進入_tmain()之前被調用的初始化函數表,但在mfc的source里無法找到它們的定義,是被extern進來的。 ???好,下面就是出問題的順序,因為初始化列表__xc_a~__xc_z中沒有_afxInitAppState,使得程序離開時_AfxTermAppState無法被調用,也就使AFX_MODULE_THREAD_STATE沒被析構,所以三塊內存沒被析構。可能是微軟認國在console程序下_afxInitAppState是不需要被調用的。 ???? 目前解決的方案是在序退出前加上 ?????????#fndef _AFXDLL ?????????????????????????AfxTermLocalData(NULL, TRUE); ?????????#endif 是不是有其它問題不得而知,因為,對mfc的一知半解

總結

以上是生活随笔為你收集整理的http://blog.sina.com.cn/s/blog_458f3c010100n4st.html的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。