DRINGEND! Eine Benötigte Ressource ist nicht verfügbar
-
Hallo,
Ich habe bereits den Beitrag unter dem unten stehenden Link gelesen, leider konnte ich darin keine endgültige Lösung für das Problem finden.Soweit ich das überblicken kann gebe ich alle verwendeten Ressourcen wieder frei, daran sollte es also nicht liegen.
http://www.c-plusplus.net/forum/viewtopic.php?t=81475&highlight=ben%F6tigte+ressource
Hier der Quellcode:
void CBilderkennungView::OnDraw(CDC* pDC) { CBilderkennungDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // ZU ERLEDIGEN: Hier Code zum Zeichnen der ursprünglichen Daten hinzufügen bool pictureOK; CMarkerList *pMarkerScanner; CLineList *pLineScanner; switch( m_KindOfPicture ) { case 0: { pictureOK = ShowStoredPicture( pDC ); //Bild aus der Datei zeichnen break; } case 1: { pictureOK = ShowCamPicture( pDC ); //Bild von der FrameGrabber-Karte zeichnen break; } } if( pictureOK ) //Wenn Bild OK... { //Verkettete Liste abarbeiten pLineScanner = m_pFirstLine; while( pLineScanner != NULL ) { if( pLineScanner->Line.GetDeleteState() == true ) { RemoveLine( &pLineScanner ); } else { pLineScanner->Line.Show( pDC ); //Linie zeichnen pLineScanner = pLineScanner->pNextLine; } } //Verkettete Liste abarbeiten pMarkerScanner = m_FirstMarker; while( pMarkerScanner != NULL ) { if( pMarkerScanner->Marker.GetDeleteState() == true ) { RemoveMarker( &pMarkerScanner ); } else { pMarkerScanner->Marker.Show( pDC ); //Makierung zeichnen pMarkerScanner = pMarkerScanner->pNextMarker; } } } }
bool CBilderkennungView::ShowCamPicture( CDC *pDC ) { CBitmap tempCBitmap, *pOldBMP; CDC *pTempDC; bool retValue; BOOL bRetCode = 1; m_IsPictureUpsideDown = false; retValue = false; m_OriginalBitmap = GetBitmap( 0 ); // temporäres DC erstellen pTempDC = new CDC; if(( pTempDC != NULL ) && ( m_OriginalBitmap.bmBits != NULL )) { bRetCode = pTempDC->CreateCompatibleDC(NULL); // ASSERT(bRetCode); if( bRetCode != 0 ) { // temp. CBitmap-Objekt fuer geladene Bitmap erstellen tempCBitmap.CreateBitmapIndirect(&m_OriginalBitmap); // Groesse und Anzahl der darstellbaren Farben des Speicher-DCs // auf Bitmap-Aufloesung einstellen pOldBMP = pTempDC->SelectObject(&tempCBitmap); // Bitmap-Daten nun aus dem Speicher auf den Bildschirm kopieren pDC->BitBlt( m_PictureStart.x, m_PictureStart.y, m_OriginalBitmap.bmWidth, m_OriginalBitmap.bmHeight, pTempDC, 0, 0, SRCCOPY); retValue = true; pTempDC->SelectObject(pOldBMP); } else { return false; } } //DeviceContext Zuweisung aufheben und löschen this->ReleaseDC( pTempDC ); pTempDC->DeleteDC(); return retValue; }
void CLine::Show( CDC *pDC ) { CPen *neuerStift, *alterStift; neuerStift = new CPen(PS_SOLID, m_Width, m_Color); alterStift = pDC->SelectObject(neuerStift); pDC->MoveTo( m_StartPointAbsolute ); pDC->LineTo( m_EndPointAbsolute ); pDC->SelectObject( alterStift ); }
-
Hi,
also ich hab in dem Code zweimal ein
new
entdeckt, aber kein
delete
.
Naja und mir hilft immer bei der Fehlereingrenzung der Debug Mode.
-
OK,
die delete's hatte ich vergessen, sollte allerdings kein Problem sein, da es sich um lokale Zeiger handelt die beim verlassen der Funktion sowiso gelösch werden. :p
Ich hab jetzt alle Zeiger an betreffender Stell mit delete gelöscht, gebracht hats aber nichts.
-
Bist du mal im debugmod durchgegangen schritt für schritt und kannst genauer lokalisieren welche Fehlermeldung wo auftaucht, sonst kann man ja nur raten.
-
Du gibst den " neuerStift" nicht mehr frei.
neuerStift.DeleteObject();