2011-08-12 54 views
0

我有一個控制檯應用程序(使用MS VS2010 SP1編寫)。 沒有MFC,沒有ATL,只是標準庫。 在調試版本中,一切正常。 但在發佈版本中存在訪問衝突: 「Mapp.exe中0x77b0206e的第一次機會異常:0xC0000005:訪問衝突讀取位置0x002cef58」。mlock中的訪問衝突

如果我從MS VS(甚至發佈模式)運行應用程序,一切工作正常,我無法找出發生了什麼事情。 我試圖用剛剛實時調試和我收到的調用堆棧:

ntdll.dll!77b020cb()  
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll] 
Mapp.exe!_unlock(int locknum=72090689) Line 375 C 
04320069() 

它的發生,當應用程序被關閉和破壞對象的收益:有像「刪除PTR」,這會導致一個行例外。但我多次檢查代碼,什麼都沒發現。我試圖使用CRT調試功能(內存泄漏診斷,自定義內存分配掛鉤等),並沒有結果。 另外我發現,使用CRT的調試版本(在發佈配置中使用多線程調試(/ MTd))時,問題得以解決。還有一件事:當我對代碼進行一些小的修改時(例如編寫一行調試代碼),調用堆棧正在改變,每次都完全不同。例如:

ntdll.dll!77b0206e()  
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll] 
Mapp.exe!_unlock_fhandle(int fh=72090689) Line 491 C 
04320069() 

和另一個

ntdll.dll!77b0206e()  
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll] 
ntdll.dll!77b0201f()  
kernel32.dll!768cf1cc()  
Mapp.exe!free(void * pBlock=0x024950f0) Line 51 C 
Mapp.exe!CGISMapLineShape::~CGISMapLineShape() Line 20 + 0x13 bytes C++ 
Mapp.exe!CGISMapPolygonShape::`scalar deleting destructor'() + 0x13 bytes C++ 
Mapp.exe!CGISMapMultyPolygonShape::~CGISMapMultyPolygonShape() Line 9 C++ 
Mapp.exe!CGISMapMultyPolygonShape::`scalar deleting destructor'() + 0xc bytes C++ 
Mapp.exe!CGISMapShapeCollection::Clear() Line 307 C++ 

據我所知,有在fpplication代碼中的一些錯誤,但問題是有,我可以找到它 問題

+0

如果不查看代碼,這幾乎是不可能解決的。如果我是你,我會開始尋找未初始化的變量和雙重刪除。 – molbdnilo

+0

絕對是內存覆蓋的地方。你可以仔細檢查你的代碼是否有雙重刪除,寫入超過分配空間的末端或開始或類似的東西。在Linux上,你也可以通過valgrind運行你的程序,我不知道什麼是Windows的替代品。 – Torp

回答

1

在發佈版本的內存處理與調試版本有很大不同。當您嘗試訪問已刪除的對象時,通常會發生此錯誤。如果你不加載符號,這個callstack就是廢話。

0

Finnaly我已經知道了! 這是幾個錯誤,所有這些 - 數組操作的索引超出範圍。

謝謝大家的幫助!