日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

VS調(diào)試

 herowuking 2015-11-04

今天下午對面的老大調(diào)試遇到這個問題,大家一起討論好久才解決這個問題


crt源代碼都是可以看到的,為了了解清楚原因,十分有必要查看源碼,源碼一般在你的VS安裝路徑下VC\crt\src下。

點擊重試,定位到崩潰源碼地方dbgdel.c的第52行。

為了了解原因,我的測試代碼是這樣寫的:

  1. int _tmain(int argc, _TCHAR* argv[])  
  2. {  
  3.   
  4.     char* p = "123456789";  
  5.     delete p;  
  6.     p = NULL;  
  7. }  

_BLOCK_TYPE_IS_VALID宏用來檢測這個內(nèi)存塊在當(dāng)前堆上是否有效,但是這里的指針是一個臨時變量,臨時變量是在棧上分配的,函數(shù)清理棧時會自動回收這些內(nèi)存,程序員無需管理。

程序員new 和 malloc申請的內(nèi)存是位于堆上面,程序不會自動清理,這就是區(qū)別所在。

因此,檢查你所釋放(delete 或 free)的那個指針,不是動態(tài)申請的就別畫蛇添足去釋放了。

老大遇到的情況就有點莫名其妙了,new了一段內(nèi)存,然后調(diào)用delete[]釋放,啥都沒干也會崩潰。大家分析了下,代碼本身是沒有原因的,這時候他檢查工程屬性發(fā)現(xiàn):大部分工程都是win32的,這個dll卻是使用的mfc dll(說道MFC我想說下,這都什么年頭了,如果是剛?cè)胄械木筒灰獙W(xué)MFC了,沒意義沒前途)。工程屬性改正后,重新編譯就好了。

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多