C++ c++;对指针的引用

C++ c++;对指针的引用,c++,pointers,reference,crash,gdi+,C++,Pointers,Reference,Crash,Gdi+,我有以下伪代码: 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 =

我有以下伪代码:

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的引用),我的程序崩溃了!很明显我做错了什么,有人知道它是什么吗?

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

尽管您的编译器在这方面已经不符合要求,但您将继续使用一个已破坏的对象,这是未定义的行为,也是代码崩溃的原因

另外,我不确定如何将指向
myclass
&nobj
)的指针分配给指向
myclass
ret
)的指针。它不应编译。

请尝试:

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

ret
在哪里声明?@Mr.TAMER function2(myclass*&ret)啊,看来我需要多睡一会儿!这真的是你正在使用的代码吗?您是否收到有关不兼容指针类型的警告?但是,您是否缺少新的
new
,或者这是伪代码问题?我们再次见面!有趣。那么我就需要使用新的,并且在我用完后一定要把它卖掉?@GeorgesOatesLarsen是的,或者更可取的是使用带有智能指针的
new
,这样你就不用担心清理了。啊,再次谢谢你:)我会在8分钟内接受你。