編譯

2011-03-08 24 views
0

過程中,爲什麼會出現以下錯誤作爲我的計劃的一部分,我用下面的代碼:編譯

/////////////// 
98:::printf("%d",abc->stv) 
////////////// 
100::if(abc) 
////////////// 

(被產生以下錯誤)

Possible null pointer dereference: abc - otherwise it is redundant to check if abc is null at line 100 
+5

您確定這是一個錯誤嗎?這可能是一個警告。 'if(abc)'等同於'if(abc!= NULL)'如果你可以在第98行訪問'abc-> stv'',這意味着'abc'肯定是非空的。 – Benoit 2011-03-08 05:02:50

+0

@Benoit,你爲什麼不把它當作答案? – 2011-03-08 05:06:27

+0

@Winston Ewert:因爲我不確定這是對這個問題的回答,因爲我不明白OP真正需要什麼。 – Benoit 2011-03-08 05:11:47

回答

2

如果測試abc它意味着到編譯器它可能爲空。因此,取消引用像abc->stv中的指針是可能的錯誤。一種解決方案是包圍if塊內的代碼printf

if(abc) 
{ 
    printf("%d",abc->stv) 
    ... 
} 
3

if (abc)測試abc是否爲空指針或沒有。

編譯器警告你,你已經假定abc是不是一個空指針(通過取消引用它在線98),這意味着要麼

  • if (abc)檢查是多餘的(因爲它永遠不會是true)或
  • 98B上abc的取消引用可能不正確,因爲abc實際上可能爲空。