将NULL对象推入std :: vector

时间:2013-10-21 08:48:31

标签: c++ macos vector stl

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

patchPos

你能明白为什么会这样吗?我已检查dispNodeX是否包含正确的数据,dispNodeYclass 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; } }; 也有正确的信息。 这很奇怪,因为前三次迭代(iPatchPos = [0,1,2,3])工作正常,然后我得到NULL引用。

修改

{{1}}

1 个答案:

答案 0 :(得分:0)

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

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,然后就会出错。