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分钟内接受你。