我想将未初始化的对象指针传递给某个方法。在该方法中,我将使用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
的范围。有人可以帮忙吗?
答案 0 :(得分:2)
要更改函数中的指针,必须通过引用传递:
void test(testClass*& t)
否则,在功能内部进行的更改在外部不可见。
您的原始指针不会更改,仍为NULL
,因此会遇到未定义的行为并导致崩溃。
每当您按值传递参数时,都会在函数内部进行复制。因此,当您执行t = new testClass();
时,您实际上正在处理指针的副本。