GDI+/Image - Memory leaks?



  • Hallo,

    komme hier einfach nicht weiter...
    Ich lade über Gdiplus::Image::FromFile PNG-Dateien und halte diese in einer STL-Map vor.
    Zeichne ich die Bilder über die Draw-Funktion von Gdiplus::Graphics wird neuer Speicher allokiert. Dieser wird nicht mehr freigegeben.
    umdh:
    ntdll!RtlAllocateHeap+00000274
    MSVCR90D!_heap_alloc_base+0000005E
    MSVCR90D!_nh_malloc_dbg+000002C6
    MSVCR90D!_nh_malloc_dbg+0000007F
    MSVCR90D!_nh_malloc_dbg+0000002C
    MSVCR90D!_malloc_dbg+00000021
    mfc90ud!operator new+00000026
    mfc90ud!operator new[]+0000001A
    mfc90ud!operator new[]+00000018
    mfc90ud!CPlex::Create+0000004D
    mfc90ud!CMapPtrToPtr::NewAssoc+00000029
    mfc90ud!CMapPtrToPtr::operator[]+0000005D
    mfc90ud!CMapPtrToPtr::SetAt+00000015
    mfc90ud!CHandleMap::FromHandle+000001E5
    mfc90ud!CGdiObject::FromHandle+00000038
    mfc90ud!CDC::SelectGdiObject+00000019
    mfc90ud!CDC::SelectObject+0000003B

    Selbst wenn ich die Image-Dateien 'delete' habe ich Memory-Leaks.
    Mache ich hier etwas falsch, oder wo liegt das Problem?


  • Mod

    Quatsch! Diese Allokationen, die Du hier siehst stammen alleine aus der Nutzung der MFC Funktionen.
    Das sind Hanle-Maps und keine leaks. Diese Handlemaps werden wieder freigegeben wenn Deine Anwendung Idle ist.



  • Hallo,

    sorry, habe den falschen Teil kopiert 😞 ... natürlich muss der umdh-Auszug wie folgt aussehen:
    ntdll!RtlAllocateHeap+00000274
    WindowsCodecs!WPF::ProcessHeapImpl::Alloc+00000016
    WindowsCodecs!CGpPngDecoder::HrInitZLib+00000049
    WindowsCodecs!CDecoderBase::CopyPixels+0000014A
    WindowsCodecs!CDecoderFrame::CopyPixels+0000006A
    gdiplus!GpWicDecoder::Decode+0000014C
    gdiplus!GpDecodedImage::InternalPushIntoSink+0000002D
    gdiplus!GpDecodedImage::PushIntoSink+0000003C
    gdiplus!GpMemoryBitmap::InitImageBitmap+0000015F
    gdiplus!CopyOnWriteBitmap::PipeLockBitsFromDecoder+000000A5
    gdiplus!CopyOnWriteBitmap::PipeLockBits+0000056B
    gdiplus!GpBitmap::PipeLockBits+00000050
    gdiplus!GpGraphics::DrvDrawImage+00001EFF
    gdiplus!GpGraphics::DrawImage+00000386
    gdiplus!GpGraphics::DrawImage+00000051
    gdiplus!GdipDrawImageRectRect+000001E8
    gdiplus!GdipDrawImageRectRectI+00000080
    Blubber!Gdiplus::Graphics::DrawImage+000000AE (c:\program files\microsoft sdks\windows\v6.0a\include\gdiplusgraphics.h, 1726)

    Woran liegt das? Ich habe keinen Plan mehr.



  • Hat hier keiner eine Idee?
    Danke.



  • Vermutlich rufst du GdiplusShutdown nicht auf...

    http://msdn.microsoft.com/en-us/library/ms534076.aspx

    Ich arbeite auch gerade an einem Projekt wo ich PNGs über GDI+ lade -> kein Problem, keine Leaks.


Anmelden zum Antworten