Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Fehler beim löschen von Pointer

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
26.07.2006, 20:27 Uhr
~Gallifeld
Gast


Ich bin grade dabei ein Spiele-Tutorial für Bomberman, das in C geschrieben ist, auf C++/Klassen umzusetzen, aus Übungsgründen.

Nun hab ich das Problem, dass beim Abbau der einzelnen Felder des Spielfeldes ich einen Fehler kriegewenn ich den Zeiger auf die Felder lösche:


C++:
void CGamefield::Shutdown(void)
{
    if(this->pFields != NULL)
    {
        delete(this->pFields);
        this->pFields = NULL;
    }
}


Header CGamefield:

C++:
class CGamefield
{
public:
    CGamefield(void);
    ~CGamefield(void);
    void    Init(void);
    int        SetSize(int iXSize, int iYSize);
    void    Shutdown(void);
private:
    int iXSize;
    int iYSize;
    CField *pFields;
    
};


Die Felder werden in einer anderen Mehtode wie folgt allociert

C++:
int CGamefield::SetSize(int iXSize, int iYSize)
{
.....
this->pFields = new CField[iXSize * iYSize];
....
}


Was könnte der Fehler sein, tappe da ziemlich im dunklen.

Thx for tips
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
26.07.2006, 20:30 Uhr
~Gallifeld
Gast


Nachtrag:

Der Fehler der kommt sieht so aus, das der debug in der datei dbgdel.cpp stehen bleibt, an der Anweisung

Zitat:

/* verify block type */
_ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse));
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
26.07.2006, 21:39 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


feld musst du mit


C++:
delete[] feldpointer;



löschen. Ansonsten solltest du schauen das du SetSize wirklich nur 1x aufrufst, sonst bekommst du speicherlecks
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
27.07.2006, 20:27 Uhr
~Gallifeld
Gast



Zitat von FloSoft:
feld musst du mit


C++:
delete[] feldpointer;



löschen. Ansonsten solltest du schauen das du SetSize wirklich nur 1x aufrufst, sonst bekommst du speicherlecks


ouch

Danke.

Hab noch eine Frage bezüglich einem Handel zu einem GDI Objekt. Hab solch einen Handle und möchte den prüfen, ob dieser an einem bestimmten punkt NULL ist bzw. auf GDI_ERROR steht.

C++:
HGDIOBJ    hGdiObj;

......
hGdiObj = SelectObject(this->m_dcBackbuffer, this->m_hBackbuffer);

if(hGdiObj == NULL || hGdiObj == GDI_ERROR)
    return(ERROR_UNABLE_TO_SELECT_BACKBUFFER_BITMAP);


Der Compiler wirft mir allerdings beim compilieren folgende Meldungen aus:

Zitat:

error C2040: '==' : 'HGDIOBJ' differs in levels of indirection from 'unsigned long'
error C2446: '==' : no conversion from 'unsigned long' to 'HGDIOBJ'


Versteh das Problem ehrlich gesagt nicht
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
27.07.2006, 22:54 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hi, explizit casten:


C++:
(unsigned long)hGdiObj == GDI_ERROR


bzw anders rum


C++:
hGdiObj == (HGDIOBJ)GDI_ERROR


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: