【问题标题】:Pushing NULL object into std::vector将 NULL 对象推入 std::vector
【发布时间】:2013-10-21 08:48:31
【问题描述】:

我有一个名为Pixel 的类,我只存储值(x,y)。然后我创建了一个std::vector 来将像素存储在一个补丁中并计算一些差异。 令人惊讶的是,在一些Pixels 是push_back() 进入向量后,我得到一个 NULL 引用,但我不明白为什么。这是我的代码

std::vector<Pixel*> disparityPatches;
std::vector<Pixel*> patchPos;

//COMPUTE THE DISPARITY FOR EACH OF THE PIXEL COORDINATES IN THE PATCH
for (uint iPatchPos = 0; iPatchPos < patchPos.size(); iPatchPos++)
{
    disparityPatches.push_back(new Pixel(patchPos[iPatchPos]->getX()+dispNodeX, patchPos[iPatchPos]->getY()+dispNodeY));
    if( (disparityPatches[disparityPatches.size()-1]) == NULL)
    {
        std::cout << "WHAT!?" << std::endl;
    }
}

你知道为什么会这样吗?我检查了patchPos 有正确的数据,dispNodeXdispNodeY 也有正确的信息。 这很奇怪,因为前三个迭代(iPatchPos = [0,1,2,3])工作正常,然后我得到了 NULL 引用。

编辑

class Pixel
{
    float _x;
    float _y;
public:
    Pixel();
    Pixel::Pixel(float x, float y)
    {
       _x = x;
       _y = y;
    }

    const float Pixel::getX()
    {
       return _x;
    }

    const float Pixel::getY()
    {
       return _y;
    }
};

【问题讨论】:

  • 如果您的 Pixel 仅包含 (x,y),则可能没有理由不只使用 std::vector&lt;Pixel&gt; 并完成它。
  • @WhozCraig 这不是问题所在。
  • @EitanT 因此它是评论而不是答案。
  • @WhozCraig 我知道。但“我喜欢苹果”也是如此:)
  • @EitanT 一个同样有效的评论(顺便说一句,我也是如此。尤其是 Granny Smiths)。

标签: c++ macos vector stl


【解决方案1】:

您使用以下代码将像素添加到矢量中:

disparityPatches.push_back(new Pixel(patchPos[iPatchPos]->getX()+dispNodeX, patchPos[iPatchPos]->getY()+dispNodeY));

也许new Pixel(patchPos[iPatchPos]-&gt;getX()+dispNodeX, patchPos[iPatchPos]-&gt;getY()+dispNodeY) 可能会在构造函数以某种方式失败时返回 null,所以会添加 NULL,然后你得到你的错误。

【讨论】:

  • 这只会发生在非标准 C++ 编译器上
  • @dreamlax: 或者如果指定了一个破坏标准的编译/链接标志。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-28
  • 1970-01-01
  • 2012-03-10
  • 1970-01-01
相关资源
最近更新 更多