2012-01-24 187 views
0

當我試圖訪問這個特定的指針,應用程序崩潰並示出了0000005訪問衝突錯誤。C++訪問衝突碰撞

我如何能趕上這個錯誤,並用一個嘗試& catch塊保持它在關閉過程我會在C#。 或者我在使用之前如何檢查訪問是否被拒絕到內存區域?

實施例:

MyClass** a = (MyClass**)(0x12345678); 
a[0]->b = 1; 

我訪問指針表和設置的類的成員中的一個的值。 這確實有效,但問題是「0x12345678」並不總是在該區域中加載類。地址有一個值,但它並不指向正確的內存區域,它不保存的值是0

請記住,這是加載到一個應用程序,我不再是一個DLL有源代碼。 所以我試圖動態地設置應用程序的設置。

+0

*所以我想動態設置應用程序的設置*使用工具 - >選項 - >設置,而不是隨機寫入內存? –

+3

不要那樣做。 –

+0

:他們不是我讓用戶改變的選項。這基本上是對我的一箇舊應用程序的更新。編輯:我不是隨機寫入記憶,我扭轉了我使用的基本班級結構,我得到了改變的設置。問題很簡單,設置類指針有時會保存一個垃圾值,指向一個我無權訪問的區域。 @Seth Carnegie然後你會推薦什麼來獲得正確的結果。 – John

回答

2

您可以使用Structured Exception Handling捕獲這些類型的錯誤。特別是針對EXCEPTION_ACCESS_VIOLATION的過濾器。

只要確定知道自己在吞噬異常時所做的事情:如果您的垃圾地址指向了防護頁,則可能會看到here中描述的行爲。

+0

你是一個紳士和學者。爲此我向你提供我所能提供的一切。對於我使用__try和__except的記錄。 – John

+0

@John謝謝你,親切的先生。 –