2014-04-23 40 views
3

當我執行這個...我要崩潰了我的MFC應用程序

void CcrashDlg::OnBnClickedBtnCrash() 
{ 
    char* ptr = NULL; 
    *ptr = 1; 
} 

應用只是記錄「訪問衝突」,什麼都沒有發生。

我該如何崩潰我的MFC應用程序? (visual studio 2010)

+0

您是否有任何異常處理程序?我不知道,但也許MFC在某些情況下做了一些愚蠢的吞嚥異常(如點擊此按鈕)。 –

+0

使用發佈版本嘗試您的代碼。 – jussij

+0

@JonathonReinhart只是默認生成的代碼與我的onbnclickedbtncrash()。 – chaeyk

回答

2

我相信答案就藏在評論的問題,所以我要在這裏總結一下 - 這是很重要的東西。

詳細信息請見:The case of the disappearing OnLoad exception – user-mode callback exceptions in x64

您預計會使程序崩潰的無效操作在所有情況下都不會崩潰。這包括其他答案中概述的許多技術。

只有當您使用64位版本的Windows並且您位於由Windows內核調用的函數內時纔會出現此問題。在32位版本的Windows中,可能會從調用內核的代碼中捕獲異常或無效操作,但在64位版本的Windows中,這是不可能的。 Windows本身會在用戶/內核邊界捕獲錯誤,並且忽略它!這被認爲是比每次崩潰程序更好的結果,因爲32位工作得很好的catch塊沒有機會再處理錯誤。

您應該仍然能夠立即停止使用ExitProcessTerminateProcess但我沒有嘗試過它們。

0

Assert(NULL)會使您的應用程序在調試模式下崩潰。我不認爲你想崩潰的版本,但如果是這樣,你可以使用Verify there/both。

其他導致崩潰的簡單方法是使用sprintf,格式錯誤說明符錯誤,例如在期望「%d」時輸入字符串。

0

這是我用來崩潰我的應用程序。我認爲它和你的一樣。在發佈模式下,它也崩潰。

*(int*)0 = 1; 
0
  1. 中止()的作品在釋放模式時,在64位操作系統編譯Win64的平臺

  2. 應用程序崩潰。

1

只是除以零的數字,

int div = 1; 
div--; 
int cr = (any number)/div;