2012-02-04 45 views
2

考慮這個方法:什麼可能導致`MyType * pType`從有效參數中返回之前返回null?

result MyClass::getBMPText(Osp::Graphics::Bitmap *pBMP, Osp::Base::String &outtext, const int index) const { 
    //Do stuff 
    AppLog("3 Returning %S, 0x%X", outtext.GetPointer(), (int)pBMP); 
    return E_SUCCESS; 
} 

我這樣稱呼它:

String itemstr; 
Bitmap *pBMP = null; 
for (int i = 0; i < ItemCount(); ++i) { 
    getBMPText(pBMP, itemstr, i); 
    AppLog("got %d : %S 0x%X", i, itemstr.GetPointer(), (int)pBMP); 
} 

現在看看日誌:

5537.642,INFO,P35,T00,A190, FileMan :: getBMPText(401)> 3返回圖像,0xB96E2140 5537.643,INFO,P35,T00,A190,FileMan :: Update1p2List(130)>獲得0:圖像0x0

要重複我的問題/觀察:該函數將其返回值記錄爲有意義且相關的剛設置它。然而,客戶端取回了它發送的相同的空引用。

+0

' printf' – John 2012-02-04 00:26:14

回答

3

您正在按值傳遞指針,所以原始指針永遠不會被更改。將函數簽名更改爲Osp::Graphics::Bitmap * & pBMP以通過引用傳遞指針。

+0

我想我可以通過簡化獲得這個數量。我敢打賭,我在別處做過。 WHA-贊成!謝謝,它的工作原理! – John 2012-02-04 00:33:15

0

這是因爲你沒有設置*pBMP裏面的函數(你設置了pBMP,指針類型)。改變指針本身不會影響其目標。

同樣,與index,你傳遞的價值,所以沒有出來。

1

如果您想更改原始指針,您必須將其作爲指針或參考傳遞。例如。功能getBMPTest將被宣佈爲

result MyClass::getBMPText(Osp::Graphics::Bitmap *& pBMP, Osp::Base::String &outtext, const int index) const 

,並呼籲像

getBMPText(pBMP, itemstr, i); 

如果你喜歡的指針,你可以像這樣做,而不是:對`AppLog`,認爲

result MyClass::getBMPText(Osp::Graphics::Bitmap ** pBMP, Osp::Base::String &outtext, const int index) const 

getBMPTest(&pBMP, itemStr, i); 
相關問題