Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Memory Leak! Hilfe!

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
01.01.2005, 17:15 Uhr
~Wahwah
Gast


Hi,

ich hab hier ein Memory Leak Problem mit einer Fuktion.

Der Fuktion wird 'Text' übergeben, dabei ist 'Text' eine Textzeil mit
Leerzeichen. Die Funktion trennte die einzelnen Wörter (an den Leerstellen) in
einzelne char* s ( parts[0...partscount] ) .

Was muss ich alles löschen, um den Speicher wieder von den
Daten der vorherigen Ausführung zu befreien?



C++:
char **parts;
int partcount;

void getParts(char *Text)
{

    char *str = Text;
    partcount = 0;
    int len = 0, i = 0;

    
    str += strspn(str," ");
    
    while (*str)
    {
        partcount++;
        str += strcspn(str," ");
        str += strspn(str," ");
    }
    
    str = Text;
    
    parts = new char*[partcount];

    str += strspn(str," ");
    
    while (*str)
    {
        int len = (int)(strcspn(str," "));
        parts[i] = new char[len + 2];
        memcpy(parts[i],str,len);
        parts[i][len] = 0;
        str += len + strspn(str+len," ");
        i++;
    }

}


 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
01.01.2005, 17:50 Uhr
Pablo
Supertux
(Operator)


Du hast new char*[partcount] und in der while Schleife parts[i] = new char..., aber diesen Speicher gibst du nie frei --> Leak.

Wenn du schon mal C++ benutzt, dann nimm auch std::string statt char*, mit std::string ist viel angenehmer zu arbeiten und hast solche Probleme nicht.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
01.01.2005, 18:13 Uhr
(un)wissender
Niveauwart


Ansonsten natürlich delete bzw. delete [].
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
01.01.2005, 20:01 Uhr
~gast
Gast


oder eben per free falls c verwendet wird
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
01.01.2005, 20:27 Uhr
Pablo
Supertux
(Operator)


nein, weil de new benutzt hat!
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
02.01.2005, 10:17 Uhr
~Wahwah
Gast


Aber wat kann und muss ich wie deleten ?

Von wegen Pointern usw.

delete [] parts;
delete [] *parts;

?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
02.01.2005, 13:58 Uhr
Pablo
Supertux
(Operator)


ganz genau, aber nicht so!


C++:
while(i)
{
    delete [] parts[i--];
}
delete [] parts;


--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
02.01.2005, 14:40 Uhr
~Wahwah
Gast


Ahaa!

Danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


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: