【问题标题】:c++ reference to pointerc++ 引用指针
【发布时间】:2012-01-25 00:53:57
【问题描述】:

我有以下伪代码:

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

【问题讨论】:

  • ret 声明在哪里?
  • @Mr.TAMER function2(myclass*& ret)
  • 啊,看来我需要多睡了!
  • 这真的是您使用的代码吗?您是否收到有关不兼容指针类型的警告?
  • 不过,您不是缺少new 还是伪代码问题?

标签: c++ pointers reference crash gdi+


【解决方案1】:

您通过 &myclass() 获取临时地址,这是一个禁忌,因为临时地址在表达式末尾被销毁,您的编译器不应该允许这样做。

尽管您的编译器在该领域已经不符合标准,但您将继续使用已破坏的对象,这是未定义的行为,也是您的代码崩溃的原因。

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

【讨论】:

  • 我们又见面了!有趣的。那么我需要使用 new ,并且确保在完成后释放它?
  • @GeorgesOatesLarsen 是的,或者最好使用带有智能指针的new,这样您就不必担心清理它
  • 啊哈,再次感谢你 :) 我会在 8 分钟内接受你。
【解决方案2】:

尝试:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-19
    • 2019-05-20
    相关资源
    最近更新 更多