what happens
-
ich habe folgende struktur:
das_hier hallo() { allokiere im Speicher etwas vom typ "das_hier" mit dem namen x; weise x etwas zu; return x; } int main{ das_hier y; y=hallo; }
was genau passiert nun im speicher im bereich des y?
und die zweite frage wäre: ich habe hier immer das problem, dass beim Aufruf der funktion hallo der speicher immer voller wird, da das allokierte element nicht entfernt wird. wie kann ich das handeln, wenn ich definitiv innerhalb der funktion hallo speicher zuweisen muss??
-
@1: Zunächst wird ein (leeres) Objekt mit dem Namen 'y' angelegt und als nächstes in der Zuweisung der Inhalt von x (über Umwege) in diesen Speicherbereich reinkopiert.
@2: Du könntest x auch auf dem Stack anlegen, dann wird es nach dem Ende der Funktion von selber wieder freigegeben. Alternativ übergibst du der Funktion einen Zeiger auf das Objekt, das sie initialisieren soll:
//Variante 1: das_hier hallo1() { das_hier x; //fülle x mit Daten return x; } ... das_hier y = hallo1(); //Variante 2: void hallo2(das_hier* ptr) { //fülle *ptr mit Daten } ... das_hier y; hallo2(&y);