0

我想将未初始化的对象指针传递给某个方法。在该方法中,我将使用new运算符(或malloc)创建对象的一个​​实例,并将其地址分配给传递的指针。这是我的代码的一部分:

void test(testClass* t){
    ...
    t = new testClass();
    ...
}

int _tmain(int argc, _TCHAR* argv[])
{
    testClass* t = NULL;
    test(t);
    cout<<t->getTestValue()<<endl;
    delete t;
}

我的问题出在_tmain函数中(在调用之后test),我想在其中调用getTestValue指向的对象的方法t。在这里,我的程序崩溃并以访问冲突意外异常终止。

似乎动态创建的对象(使用运算符new甚至malloc)在函数范围之外是不可用的test。有人可以帮忙吗?

4

1 回答 1

2

要更改函数中的指针,必须通过引用传递:

void test(testClass*& t)

否则,函数内部所做的更改在外部是不可见的。

您的原始指针不会改变,保持不变NULL,因此会遇到未定义的行为和崩溃。

每当您按值传递参数时,都会在函数内部进行复制。因此,当您这样做时t = new testClass();,您实际上是在处理指针的副本

于 2012-06-07T07:37:40.673 回答