johnny: C++ und der Heap

Beitrag lesen

Hi,

ich zerbreche mir seit neuestem den Kopf über folgendes Problem. Das Problem taucht in einer meiner Projekte öfter auf und ich weis nicht wirklich wie ich das lösen könnte.

Also erst mal zur Veranschaulichung folgendes Beispiel:

  
char* getXYZ(unsigned long* ul, const char* cc)  
{  
 // suche irgendwas  
 // ... code ...  
 // suche noch immer  
 // nochmal ... code ...  
  
 // Doch dann plötzlich folgendes Konstrukt:  
 unsigned long length = 1001;  
  
 char* hans = new char[length];  
  
 strncpy(hans, "Hallo Welt .... Auf Wiedersehen\r\n\0", 1001);  
  
 return hans;  
}  

Ich denke auf den Ersten blick sieht das wie eine ganz normale Klassenmethode.
Aber das Problem ist eigentlich nur am Schluss.
Dort wird auf dem Heap ein Array mit 1001 Elementen freigeschaufelt und hans zugewiesen.
Dann bekommt hans noch ein bisschen Inhalt und Schließlich wird hans zurückgegeben bzw. seine Adresse.

Doch nachdem hans zurückgab existiert er noch immer.
Seine Variable wird schon lange nicht mehr vom Programm benötigt.
Er existiert noch immer, (das Schwein! Verzeihung.).
Oder etwa doch nicht?

Wenn hans auf dem Stack wäre würde er doch wieder freigegeben werden? Aber um den Stack muss sich der Programmierer kümmern, also ich.
Aber auf dem Stack kann ich ihn nicht werfen da die Größe wahnsinnig Variabel ist von 1 Zeichen bis hin zu 10000.
Oder soll ich die Funktion alloca() verwenden?
Aber soviel ich weis ist die ein wenig langsamer wie new?
Oder bin ich schon wieder falsch?

Wenn dem allem nicht so ist und hans doch freigegeben wird, ist mein Posting nicht mehr weiter relevant und somit als erledigt anzusehen.

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

Beispiel:

  
  
char* sepp = getXYZ(pointer1, pointer2);  
  
printf("%s\n", sepp); // quasi verarbeitung  
  
if(sepp != NULL) {  
 delete[] sepp;  
 sepp = NULL;  
}  
  
// Alles in Ordung! Sepp und/bzw. Hans wurden gelyncht!  
  

Johnny