我有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;
}
答案 0 :(得分:1)
_objBx = new X();
成员函数中的 B
修改了B::_objBx
对象。这与任何A::_objAx;
无关。
然后pObjA->printA();
调用一个取消引用空指针的函数。
我猜你的描述中你打算B
包含X* &_objBx;
成员。