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+0000003BSelbst wenn ich die Image-Dateien 'delete' habe ich Memory-Leaks.
Mache ich hier etwas falsch, oder wo liegt das Problem?
-
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.