【问题标题】:What could cause `MyType *pType` to go from valid parameter before return to null upon return?什么可能导致 `MyType *pType` 在返回时从有效参数返回 null?
【发布时间】:2012-02-26 13:56:27
【问题描述】:

考虑这种方法:

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) > got 0 : Images 0x0

重复我的问题/观察:该函数将其返回值记录为有意义和相关的刚刚设置它。但是,客户端会返回它发送的相同空引用。

【问题讨论】:

    标签: c++ parameters null arguments


    【解决方案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】:

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

      同样,index 是按值传递的,所以没有任何结果。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 我认为我可以摆脱这种过度简化的次数。我敢打赌我在别处做过。哇!谢谢,它有效!
        猜你喜欢
        • 1970-01-01
        • 2018-06-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-08
        • 2012-10-16
        相关资源
        最近更新 更多