Array als rückgabe eines Programms.
-
Ich habe ein Programm, dass ein Array zurückgiebt, aber zur Zeit noch als Adresse. Dies ist allerdings das Problem, da nach der Rückgabe der Adrese der Speicherbereich wieder Freigegeben wird, und es nun Zufall wäre, wenn es denn mal klappen würde. Und wenn ich es schaffe, das er es nicht wieder freigiebt, wie kann ich ihn dann sagen, wann der Speicherbereich wieder Freiugeben ist.
Strukturen kann ich nicht verwenden, da ich vor Programmstart die Größe des Array nicht kenne. Auch funktioniert ein global angelegter Speicherbereich nicht, da die Funktion sich selbst Rekursiv aufruft, und so mehrere Speicherbereiche von nöten sind.
-
Krux schrieb:
Ich habe ein Programm, dass ein Array zurückgiebt,
Ich schätze eher, du hast eine Funktion oder eine Methode, die ein Array zurückgibt ;), oder?
aber zur Zeit noch als Adresse. Dies ist allerdings das Problem, da nach der Rückgabe der Adrese der Speicherbereich wieder Freigegeben wird, und es nun Zufall wäre, wenn es denn mal klappen würde. Und wenn ich es schaffe, das er es nicht wieder freigiebt, wie kann ich ihn dann sagen, wann der Speicherbereich wieder Freiugeben ist.
Strukturen kann ich nicht verwenden, da ich vor Programmstart die Größe des Array nicht kenne. Auch funktioniert ein global angelegter Speicherbereich nicht, da die Funktion sich selbst Rekursiv aufruft, und so mehrere Speicherbereiche von nöten sind.
Dynamisch allokieren?
int * foo(std::size_t arraySize) { int *array = new int[arraySize]; //array irgendwie bearbeiten return array; }Löschen mittels delete [] nicht vergessen.
EDIT:
Oder kennst du dich schon etwas mit der STL aus? Dort gibt's ne Container-Klasse namens std::vector, die prinzipiell wie ein Array funktioniert, sich aber selbst um die Allokation von Speicherplatz kümmert, d.h. automatisch größer wird, wenn du Objekte reinschiebst.MfG
GPC
-
Danke für die schnelle hilfe. Habs auch gleich eingebaut, aber wie genau ruft man delete auf? recht es da einfach "delete [] name" anzugeben, oder muss man da auch ne größe angeben (das hat mich ein weig verunsichert.
Ich hab noch ein Problem:
Ich habe eine Funktion die ein sruct zurückgiebt, dies will ich auf einer Variablen Speichern, die auch ein Strukt vom selben typen ist. Der Kompiler spuckt aber folgende Fehlermeldung aus:
main.cpp:10: Fehler: Umwandlung von »Feld ()()« in nicht-skalaren Typen »Feld« angefordertDamit kann ich nichts anfangen.
-
Krux schrieb:
Danke für die schnelle hilfe. Habs auch gleich eingebaut, aber wie genau ruft man delete auf? recht es da einfach "delete [] name" anzugeben, oder muss man da auch ne größe angeben (das hat mich ein weig verunsichert.
ne, dass braucht man nicht angeben:
int *array = new int[arraySize]; //was mit array machen delete [] array;Wichtig sind nur die eckigen Klammern, die man braucht, wenn man dynamische Arrays wieder löschen möchte.
Ich hab noch ein Problem:
Ich habe eine Funktion die ein sruct zurückgiebt, dies will ich auf einer Variablen Speichern, die auch ein Strukt vom selben typen ist. Der Kompiler spuckt aber folgende Fehlermeldung aus:
narrenwirtschaft.cpp:10: Fehler: Umwandlung von »Feld ()()« in nicht-skalaren Typen »Feld« angefordertDamit kann ich nichts anfangen.
Und ich kann nichts ohne den besagten Quellcode anfangen. Bitte posten

-
Das Problem hat sich mitlerweile gelöst, es war nur eine Klammer, die ich beim Funktionsaufruf vergessen hatte.
-
gibt es eigentlich einen befehl, der angiebt, wie viel speicher man reserviert hat? Dann weiß man, ob auch alles wieder frei ist.
-
Standardmäßig: nein
(aber eventuell hat dein Betriebssystem da eine geeignete Funktion)