未成功分配给指针

时间:2012-05-28 08:11:02

标签: c++ pointers

我只问这个问题,因为我已经将它隔离到了三行代码中,所以很明显我只是搞砸了,因为我没有经验:

Movie* ptr;
if(title == r->getItem().getTitle())
{
    ptr = &(r->getItem());
    cout << "Found: " << ptr->getTitle() << "!";
}

基本上最新的是title == "The Godfather"所以因此,r->getItem().getTitle()正在返回。但我不明白的是,当我尝试制作指向Movie返回的r.getItem()对象的指针时,我无法使用指针。肯定有某些分配给它,但是当我尝试ptr->getTitle()时它返回null。

到底是怎么回事?

3 个答案:

答案 0 :(得分:1)

我认为你正在做这样的事情

Movie& getItem () {
   Movie m ();
   return m;
}

/* ... */

Movie * p = & (getItem ());

问题是m是一个堆栈对象,在getItem返回后会丢失。这是C ++中常见的错误。

getTitle调用也不应该有效,但可能是偶然的。

您必须在堆上创建对象。

我避免这样做的简单规则:不要使用&amp;除非你没有考虑过你十次做什么,否则完全是操作员。

答案 1 :(得分:0)

您应该发布更多代码。但很可能getItem会返回一个按值的对象,即它返回一个临时对象,该对象是原始对象的副本。在赋值之后 - 这个临时对象被销毁,所以你的ptr指向一个被破坏的对象,(可能)无法访问的图像。

答案 2 :(得分:0)

这里可能会发生很多事情:

  1. getItem()方法可能不会直接返回Movie类,该方法的定义是什么?它可以是一个继承的类,其中getTitle()的实现方式不同。
  2. 它可能会返回对某个类的引用,该类会超出范围,从而导致内存错误。
  3. getTitle()方法可能不会返回您可以流式传输的内容,它真的是一个字符串吗?该方法的定义是什么?