什么可能导致`MyType * pType`在返回之前返回null之前从有效参数出发?

时间:2012-02-04 00:24:40

标签: c++ parameters null arguments

考虑这种方法:

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)&gt; 3返回图像,0xB96E2140   5537.643,INFO,P35,T00,A190,FileMan :: Update1p2List(130)&gt;得0:图像0x0

要重复我的问题/观察:该函数将其返回值记录为有意义且只需设置它即可。然而,客户端返回它发送的相同空引用。

3 个答案:

答案 0 :(得分:3)

您按值传递指针,因此原始指针永远不会更改。将函数签名更改为Osp::Graphics::Bitmap * & pBMP以通过引用传递指针。

答案 1 :(得分:1)

如果您想更改原始指针,则必须将其作为指针或参考传递。例如。函数getBMPTest将声明为

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

并调用

getBMPText(pBMP, itemstr, i);

如果你更喜欢指针,你可以这样做:

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

getBMPTest(&pBMP, itemStr, i);

答案 2 :(得分:0)

这是因为你没有在函数内设置*pBMP(你设置pBMP,指针类型)。更改指针本身不会影响其目标。

同样地,对于index,你是通过值传递的,所以没有任何结果。