将NULL引用指针传递给另一个类的内存分配函数

时间:2016-03-18 06:34:51

标签: c++ pointers pass-by-reference

我有2个班,A班和B班。

从A :: fun1(),我尝试传递一个NULL指针作为B :: fun2()的引用。我希望B :: fun2()动态地为我的引用指针分配内存并将其返回给A类。

当我尝试这样做时,我的程序崩溃了。但是,当我在A类中分配内存并将其传递给B时,一切正常。

是否无法将Null指针作为引用传递给另一个类并将其返回并分配一些内存?

以下是我尝试的代码。

结构X:

struct X
{
    char symbol;
    uint32_t number;
};

A类:

class A
{
    public:
        A();
        void fnA();
        void printA();

    private:
        X*  _objAx;
};

A::A():
   _objAx(0)
{ }

void
A::fnA()
{
    //_objAx = new X();   //<---- Uncommenting this line make the program work.
    B::create(this,
              _objAx);    // Passing the NULL pointer as reference
}

void
A::printA()
{
    cout << "Sym: " << _objAx->symbol << "; Num: " << _objAx->number << endl;
}

B组:

class B
{
    public:
        static void create(A*   pObjA,
                           X*   &objX);
        void fnB();

    private:
        B(A* pObjA, X* &objX);

        A*  _pObjA;
        X*  _objBx;
};

B::B(A*     pObjA,
     X*&    objX):
   _pObjA(pObjA),         // Pointer to Class A in order to call A::printA() later
   _objBx(objX)           // The NULL pointer got from Class A
{   }

void
B::create(A*    pObjA,
          X*&   objX)
{
    B* obB = new B(pObjA,
                   objX);

    obB->fnB();
}

void
B::fnB()
{
    // Commenting out the below line and doing memory allocation in Class A, 
    // makes the program work.
    _objBx = new X();   

    _objBx->symbol = 'p';
    _objBx->number = 30;
    // Following line crashes the program
    _pObjA->printA();
}

主:

int main()
{
    A *ob = new A();
    ob->fnA();
    return 0;
}

1 个答案:

答案 0 :(得分:1)

_objBx = new X();成员函数中的

B修改了B::_objBx对象。这与任何A::_objAx;无关。

然后pObjA->printA();调用一个取消引用空指针的函数。

我猜你的描述中你打算B包含X* &_objBx;成员。