004
07.12.2016, 19:16 Uhr
~bamf
Gast
|
Zitat von ao: |
Du gibst einen Pointer auf eine lokale Variable zurück. Das funktioniert nicht, weil die Variable aufhört zu existieren, wenn die Funktion verlassen wird. Das ist ein gängiger Anfängerfehler, zu dem es viel Lesestoff im Internet gibt. Google mal nach "return pointer to local variable".
Es gibt mehrere Auswege: 1. in copy das Array output dynamisch anlegen (mit new) und per return rausreichen. Die main muss (!) den Speicher nach Verwendung freigeben (delete[]), sonst ist das ein Speicherleck. In trivialen Fällen wie hier ist das überschaubar, aber bei komplizierteren Programmen kann das Speichermanagement zum Problem werden, wenn man diese Technik zu oft und zu planlos einsetzt.
2. die main legt das Array an (lokal, statisch oder dynamisch, das entscheidet die main und ist für die copy-Funktion egal), reicht es in copy rein (über einen weiteren Parameter) und bekommt es gefüllt wieder raus. copy erzeugt keinen Speicher, sondern kopiert nur Daten. Das ist insofern sicherer, als derjenige, der die Daten haben will, den Speicher dafür bereitstellt und sich ggfs. um die adäquate Entsorgung kümmert.
3. Es gibt noch Smartpointer, aber das führt hier zu weit, das kannst du dir selber mal anlesen.
|
Wunderbar! Ich habe ein paar Versuche gebraucht mit dem dynamischen Array, aber jetzt funktioniert alles wie es soll, vielen Dank dafür! Variante 2 ist natürlich noch einfacher, aber die erste Variante gefällt mir deutlich besser.
Vielen Dank! |