当窗口失去焦点时,C ++ irrlicht程序崩溃

时间:2019-04-30 06:00:04

标签: c++ irrlicht

我正在使用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();

关于我在做什么错的任何建议?如何让程序容忍其他窗口的点击而不会崩溃?

0 个答案:

没有答案