2014-09-30 138 views
1

在函數中,如果我返回某個原始類型的對象的地址。我可以放心,它永遠不會是一個NULL價值?返回地址是否確保非空返回值?

我需要一個語句來檢查NULL

if (r_value) { //do something } 
else { //ERROR } 

+0

很多假設架構的答案...... – 2014-09-30 10:42:50

回答

7

對象的地址永遠不會爲空。

請注意,您沒有返回指向非靜態局部變量的指針。當函數返回時會被銷燬,所以指針將會失效;但它不會爲空,並且將無法告訴它不再有效。

在C++中,我會返回一個引用而不是一個指針來說明它不會爲空。這當然不是C的選項;我不知道你所問的兩種標記語言中的哪一種。

4

現有對象的地址保證不爲NULL。所以如果你使用這樣的地址,那麼NULL檢查就沒有意義了。

1

對象的地址永遠不能爲空。 所以你不需要檢查返回的值是否爲NULL。

但是請確保您返回的地址不會超出被調用函數返回時的範圍。

我的意思是說,如果你返回堆棧中有內存的任何對象的地址,從函數返回後它的堆棧幀將彈出,因此返回的地址將不再指向所需的/有效的位置。這可能會導致程序中的運行時錯誤。

因此,請確保您沒有返回非靜態局部變量或具有寄存器存儲類別的變量的地址。

如果被調用的函數不是由您維護的,並且如果將來有可能發生變化,那麼作爲一般的編碼實踐,爲了避免將來的喧鬧,您可以檢查返回值與NULL,否則不需要根據我檢查返回的值對NULL。