2

Pixel値のみを保存するというクラスがあります(x,y)。次にstd::vector、ピクセルをパッチに格納し、視差を計算する を作成しました。驚くべきことに、いくつかPixelの s が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正しいデータとdispNodeX正しい情報があることを確認しましたdispNodeY。最初の 3 回の反復 (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