为什么这段代码从main返回后会产生堆错误?

时间:2015-02-23 16:42:50

标签: c++ opencv heap-corruption

我有这个使用opencv的代码。我简化它以确保错误与应用程序的任何其他部分无关。代码是:

int main(int argc, char * argv)
{
    int num_images = 2;
    std::vector<cv::Mat> images(num_images);
    std::vector<cv::Mat> masks(num_images);
    vector<Point> corners(num_images);
    vector<Size> sizes(num_images);

    sizes[0] = Size(100, 100);
    sizes[1] = Size(100, 100);

    corners[0] = Point(0, 0);
    corners[1] = Point(0, 0);

    images[0].create(sizes[0], CV_8SC3);
    images[0] = cv::Scalar(255, 0, 0);

    images[1].create(sizes[1], CV_8SC3);
    images[1] = cv::Scalar(0,255, 0);

    masks[0].create(sizes[0], CV_8SC1);
    masks[1].create(sizes[1], CV_8SC1);

    masks[0] = 255;
    masks[0](Rect(0, 0, 50, 100)) = 0;

    masks[1] = 0;
    masks[1](Rect(0, 0, 50, 100)) = 255;

    Ptr<SeamFinder> seam_finder = new detail::VoronoiSeamFinder();

    seam_finder->find(images, corners, masks);

}

如果我注释掉seam_finder-&gt;查找行,它正常工作,但是当它被添加到代码中时,我在应用程序退出时出错。

在VCTools \ crt \ crtw32 \ misc \ dbgheap.c第1424行生成的错误,表达式为:_pFirstBlock == pHead。

为什么这行损坏了堆以及如何修复它。

0 个答案:

没有答案