PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C++] dynamische Speicherreservierung (delete)



Gromit
27-11-2004, 19:45
also ich hab hier eine methode der art:


char* bla..{
char* newstr = new char[30];
---do something
return newstr;
};

das problem: wie kann ich den zurückgegebenen Wert wieder löschen ?
delete[] bla.. im main funktioniert offenbar nicht
ich hab irgendwie die Vermutung, dass das ein design/verständnis-fehler is,
aber globale Variablen soll man ja auch nicht verwenden, steht in meinem script...
kann mir da jemand auf die Sprünge helfen ?
thx: gromit

chrizel
27-11-2004, 19:58
Naja, wenn du "delete bla" machen wuerdest bringt dir ja der return-Wert nix mehr weil er ja gleich geloescht wird. Das ist halt das allgemeine Problem dass wenn du in deiner Funktion irgendwas vom Heap Erzeugtes zurueckgibst muss sich der Aufrufer um das Loeschen des entsprechenden Speichers kuemmern.

Du koenntest also die Funktion bla so lassen, muesstest aber dann immer beim Aufruf von bla entsprechend handeln und nach Verwendung der Rueckgabe von bla auch wieder aufraeumen:


char *aString = bla();
// aString verwenden...
// ...
// und wenn aString nicht mehr benoetigt wird, Speicher wieder freigeben:
delete aString;

anda_skoa
27-11-2004, 21:58
delete[] bla.. im main funktioniert offenbar nicht

Sollte es aber. Vermutlich liegt der Fehler an einer anderen Stelle.

Abgesehen davon ist es möglicherweise überhaupt besser, gleich die Standard String Klasse zu verwenden.

Ciao,
_

tigger
06-12-2004, 20:51
hi,

wenn du den genauen code angibst, kann man den Fehler vielleicht finden. Bis jetzt sollte das kein Problem sein.

P.S.: std:string !!!!!!