johnny: C++ und der Heap

Beitrag lesen

Hallo,

Vielen Dank für die Erklärungen, welche aber nicht nötig gewesen wären.
Ich wollte mein Problem in den Vordergrund stellen und habe dabei die Exakte Ausdrucksweise in den Hintergrund gestellt(Es musste ja auch schnell gehen ...). Trotzdem Vielen Dank.

Die Variable, die die Adresse enthält, ist nicht mehr da nach dem Ende der Funktion, der Speicherbereich selbst bleibt erhalten, falls der Speicherbereich auf dem Heap alloziert wurde und wird "zerstört", falls er auf dem Stack alloziert wurde. Wenn Du den NACH dem Ende der Funktion weiterverarbeite willst, MUSST Du ihn daher auf dem Heap allozieren - und Dich dann manuell um die Aufräumarbeiten kümmern, sobald Du ihn nicht mehr brauchst.

Eine Möglichkeit die mir einfallen würde, wäre hans nach dem Funktionsaufruf wenn sein Inhalt weiterverarbeitet wurde freizugeben.

Beispiel:
[...]

Das Beispiel ist richtig: So müsstest Du das machen.

Wenn ich für das ganze jetzt eine Klasse schreibe die all das Automatisch erledigt?

  
class Heap {  
private:  
 char* str;  
public:  
 Heap() { str = NULL; }  
 ~Heap() { if(str != NULL) { delete[] str; str = NULL } }  
 void set(char* str) {}  
 char* get(void) { return str; }  
};  
  
{  
 Heap heap;  
 getXYZ(a_,a__,&heap);  
 heap.get(); // gibt Array auf Heap zurück das von der getXYZ erzeugt wurde  
 printf("%s", heap.get());  
// Wenn nun das Ende dieses Blocks erreicht ist z.B. Funktionsende wird der Destruktor von Heap aufgerufen der den Heap wieder freigibt. So kann verhindert werden das ich es vergesse.  
// Was hältst du von der Idee?  
}  

johnny