我正在使用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();
关于我在做什么错的任何建议?如何让程序容忍其他窗口的点击而不会崩溃?