Я использую библиотеку 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.