2

我有一个名为Pixel我只存储值的类(x,y)。然后我创建了一个std::vector将像素存储在补丁中并计算一些差异。令人惊讶的是,在一些Pixelspush_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;
    }
};
4

1 回答 1

0

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

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

当构造函数以某种方式失败时可能new Pixel(patchPos[iPatchPos]->getX()+dispNodeX, patchPos[iPatchPos]->getY()+dispNodeY)会返回 null ,因此将添加 NULL ,然后你得到你的错误。

于 2013-10-21T09:14:59.957 回答