Mat对象数组太大会导致Seg Fault

时间:2017-08-16 09:15:53

标签: c++ arrays opencv vector segmentation-fault

#include <iostream>
#include <opencv2/core.hpp>

int main()
{
    cv::Mat test[100000];
    std::cout << "testing" << std::endl;

    return 0;
}

返回seg错误。我找不到有关此设置的任何信息。我无法想象为什么它会弄乱内存,因为我没有用任何东西初始化Mats(因此它们都是空的,使用更多内存的4K图像没有问题)。

1 个答案:

答案 0 :(得分:0)

解决方案是将Mat s(cv::Mat[])的数组转换为Mat s(std :: vector)的向量。我不会假装理解为什么,但我猜测矢量有更好的内存管理功能。

#include <iostream>
#include <opencv2/core.hpp>

int main()
{
    int size = 100000;
    std::vector<cv::Mat> test;
    test.resize(size);
    for(int i = 0; i < size; i++)
    {test[i] = cv::Mat::zeros(1, 256, CV_32F);}
    std::cout << "testing" << std::endl;

    return 0;
}