Я использую Irrlicht, чтобы нарисовать изображение на экране, используя код ниже. Я в основном получаю данные изображения из моего класса рисования, преобразую их в IImage, преобразую их в секунду, увеличив масштабирование IImage, а затем преобразую в ITexture, которая рисуется на экране. Очевидно, что если я запускаю этот код без удаления или удаления чего-либо, я получаю серьезную утечку памяти, но я заметил странное поведение при удалении текстуры. Если я помещаю tex-> drop () после кода рисования сцены в конце, программа вылетает через несколько секунд. Если я урону текстуру до запуска кода рисования сцены, программа будет работать вечно без явной утечки памяти, пока я не нажму на любое другое окно. Нажатие на другое окно вызовет сбой программы. Я могу щелкнуть окно программы, переместить его и т. Д., Но нажатие на любое другое окно вызывает сбой. Если я вообще уберу строку tex-> drop (), программа допустит нажатие на другие окна, но это приведет к серьезной утечке памяти.
// get image data, convert to IImage and scale image to 640 by 480
unsigned char * ppm_data = ppm.get_image_data();
irr::video::IImage* image = driver->createImageFromData(irr::video::ECF_R8G8B8, irr::core::dimension2d<unsigned int>(320, 240), ppm_data);
irr::video::IImage* image2 = driver->createImage(irr::video::ECF_R8G8B8, irr::core::dimension2d<unsigned int>(640, 480));
image2->fill(irr::video::SColor(255, 255, 0, 0));
image->copyToScaling(image2);
// convert the scaled image to an ITexture
irr::video::ITexture* tex = driver->addTexture("NAME", image2);
// delete the image data
delete[] ppm_data;
ppm_data = nullptr;
image->drop();
image2->drop();
tex->drop(); // <-- This line fixes the memory leak but causes crashes when window loses focus
// draw scene...
driver->beginScene(true, true, irr::video::SColor(250, 190, 190, 250));
driver->draw2DImage(tex, irr::core::vector2d<int>(0, 0));
driver->endScene();
Есть предложения, что я делаю не так? Как заставить программу терпеть нажатия на другие окна без сбоев?