2012-01-25 112 views
2

我有以下的伪代码:C++参考指针

function1()//Gets called on startup 
{ 
    myclass* obj; 
    function2(obj); 
    obj->doSomething();//crashes here! 
} 

function2(myclass*& ret) 
{ 
    myclass* nobj = &myclass(); 
    nobj->doSomething();//Does not crash 
    ret = &nobj; 
} 

这样看来,即使我设定RET为指向的NObj,当我尝试在OBJ操作(应指向的NObj,因为ret是对obj的引用),我的程序崩溃了!显然我做错了什么,任何人都知道它是什么?

+1

凡'ret'声明? –

+0

@ Mr.TAMER function2(myclass *&ret) –

+0

好像我需要睡得更多! –

回答

7

您正在通过执行&myclass()来获取临时地址,因为该临时表达式在表达式末尾被销毁,并且编译器不应该允许它。

虽然你的编译器是在这方面已经不符合标准,你会在使用一个遭到破坏的对象,这是不确定的行为,这就是为什么你的代码崩溃。

此外,我不知道你是如何分配的指针指向一个myclass&nobj)的指针myclassret)。它不应该编译。

+0

我们再见面!有趣。那么我需要使用新的,并且当我完成它时,请确保将其释放。 –

+0

@GeorgesOatesLarsen是的,或者更好的是使用带智能指针的'new',所以你不必担心清理它 –

+0

啊哈,再次感谢你:)我会在8分钟内接受你。 –

2

尝试:

myclass *obj = new myclass(); 
obj->doSomething(); 
delete obj; 
+1

尽管如此,使用智能指针。 – GManNickG