Ошибка неверного распределения при попытке создать экземпляр vpDisplayOpenCV с использованием VISP и OpenCV - PullRequest
0 голосов
/ 08 мая 2020

Я использую библиотеку VISP, созданную с помощью OpenCV, и запускаю пример отслеживания на основе модели, приведенный здесь .

Когда я пытаюсь запустить этот пример, я получаю плохую ошибку распределения памяти, когда пытаюсь создать экземпляр класса vpDisplayOpenCV со следующими параметрами: (vpImage<unsigned_char> I, int x, int y, std::string window_name).

Здесь - это конкретная строка, которая вызывает исключение:

vpDisplayOpenCV display(I, 100, 100, "Window");

Это привело меня к исключению std::bad_alloc, поэтому я обернул его вокруг блока try/catch следующим образом:

vpImage<unsigned char> I;
cv::Mat frame;

cv::resize(frame, frame, cv::Size(100, 100)); // resizes frame to a 100x100 image
vpImageConvert::convert(frame, I); // converts frame to vpImage object

try {
    vpDisplayOpenCV display(I, 100, 100, "Window"); // Creates an instance of vpDisplayOpenCV
}
catch (std::bad_alloc& e) {
    std::cout << e.what() << std::endl;
}

который выводит bad allocation на консоль

Этот конкретный конструктор перегружен 4 параметрами. У него также есть конструктор, который не принимает никаких параметров, но когда я создаю экземпляр без перегрузки конструктора, он работает не так, как ожидалось, потому что для правильной работы ему требуется объект vpImage.

Я также пытался разместить объект в куче, а не в стеке, но это тоже не сработало. Он выдал ту же ошибку, которая подтвердила мои сомнения, что конструктор класса имеет что-то, что пытается выделить много памяти в стеке. Изменение места, где хранится сам объект, не меняет места, где он выделяет память.

Кроме того, я не могу получить доступ к файлам cpp, в которых написано тело конструкторов, поэтому я не могу решить проблему или отследить причину ошибки.

Я подозреваю, что у моего компилятора может быть ограничение на то, сколько памяти он может выделить. Есть ли способ это изменить? Я использую Visual Studio 2019.

...