2011-09-23 60 views
0

Env的一個問題:VS 2008,C++關於代碼異常

我有像下面的代碼:

void HopeException(LPVOID nVerify) 
{ 
    char *p = NULL; 
    p = (char *)nVerify; 
    delete []p; 
} 

當我調用函數 「HopeException」 與參數不空,如:

HopeException(123); 

那麼我希望程序會拋出異常。

但是,當我編譯代碼VS 2008版本模式,程序運行良好。

我不知道爲什麼。任何人都可以幫我解決這個問題嗎?

或者你有什麼好主意與另一種方法實現該功能?

編輯:

我很抱歉,我想我以前貼錯代碼。

其實,我正在爲我的軟件做保護。 我的軟件將獲得DLL文件的CRC值,然後我的軟件將檢查CRC值象下面這樣:

unsigned int VerifyCRC = FF234322; 
    unsinged int CRC = getCRC("Fun.dll"); 
    LPVOID lpResult = CRC & (~VerifyCRC); 
    HopeException(lpResult); 

所以根據下面的代碼,如果黑客破解的Fun.dll文件中,執行會拋出一個異常。
這真的是我想要的。

+3

該代碼甚至不應該編譯! –

+1

刪除非'new'分配的數據是未定義的,所以無論發生什麼都取決於實現。看起來你只是在沒有爆炸的情況下倖存下來。但是,你究竟想要做什麼? – birryree

+0

我不知道你在用那個代碼做什麼或者做什麼,但是我知道的是你展示了未定義的行爲。 – Marlon

回答

0

您將nVerify視爲地址,並將其指定給您的指針p,然後在該地址上調用delete[]。如果nVerify的值不是有效的地址,你可能會得到未定義的行爲,其中包括程序看起來「運行良好」,主要是因爲你在這個函數中沒有做太多的工作。

你真的想做什麼?

+0

我很抱歉,我認爲我發佈了錯誤的代碼,下面是正確的代碼: void HopeException(LPVOID nVerify) { char * p = NULL; p =(char *)nVerify; delete [] p; } – jell

2

果凍 - C++給你足夠的繩子來吊死你自己(最可能的是你們大多數人的朋友)。

但是爲什麼呢? ( - 假設它取決於你的朋友)。

+0

如果我是OP,這將是公認的答案。 – Anson

0

該代碼不應在C++中編譯;應該編譯罰款最接近的事是:

void HopeException(int nVerify) 
{ 
     char *p = NULL; 
     p = (char *)nVerify; 
     delete []p; 
} 

該代碼會崩潰的VS 2010速成,所以我想它也將崩潰,在VS 2008如果你的目標是直接拋出一個異常調試器(在x86上)你可以使用

__asm int 3; 

如果你的目標是打入調試器,你也可以只用

DebugBreak(); 
+0

其實,我正在爲我的軟件做一個檢測。 我的軟件會得到DLL文件的CRC值。然後我的軟件會檢查CRC值如下: unsigned int VerifyCRC = FF234322; unsinged int CRC = getCRC(「Fun.dll」); LPVOID lpResult = CRC&(〜VerifyCRC); HopeException(lpResult); 所以根據下面的代碼,如果破解者破解** Fun.dll **文件,則執行將拋出異常。 這真的是我想要的。 – jell