2012-08-23 67 views
0

我有一個這樣的代碼如下所示錯誤應用程序名稱問題與應用

if ((client == NULL) || (client->type == Leave_Agent)) { 

但是當我用下面的代碼我得到在事件日誌中 錯誤改變了它如下所示

if (((client == NULL)|| (client->type == Leave_Agent)) && (client->type == 0)) { 
修改後的代碼在事件日誌中

錯誤是

Faulting application name: test.exe, version: 8.0.16.0, time stamp: 0x5036427e 

任何機構可以指導我如何牛逼o解決這個問題,這會停止我的應用程序。運算符將會在C++中發生任何問題嗎?

回答

2

我想你想移動()左右,這樣你永遠不會取消引用,如果它是NULL指針:

if ((agent == NULL)|| ((agent->type == SPUES_ntAgent) && (agent->type == 0))) { 
+0

它做到了訣竅,但什麼是解引用,你能用簡單的話來解釋一下,我想知道之前我們得到的邏輯問題 – vettori

+1

@解除引用僅僅意味着拿一個指針並看它指向什麼在。如果指針爲NULL,那麼這是不合法的,所以通常在您安排運算符的條件下確保表達式的求值在得到引用可能爲NULL的值之前停止。 – Flexo

3
if (((agent == NULL)|| (agent->type == SPUES_ntAgent)) && (agent->type == 0)) 

如果代理人是NULL那麼&&左側會始終爲真,並且agent->type將始終被訪問。因此NULL代理確保NULL取消引用。

您應該更改您的代碼,以確保它只在不是NULL時才被取消引用。

+0

你的意思是@Flexo提到的那個? – vettori

+0

@vettori是的,那會做:-) – cnicutar

+0

什麼是解除引用意味着,我以前遇到了什麼問題? – vettori

2

的問題是,你能達到這個

agent->type == 0 

agent==NULL

我不能評論如何解決不知道你期望的行爲。至少你應該確保agent不是取消引用,如果它是==NULL