[Funktion] char* Rückgabe
-
Ich kann es aber nicht so lassen, wenn ich dann den Speicher von malloc nicht wieder freigeben kann.
Oder denk ich jetzt völlig falsch???
Malloc-->Speicherreservierung im Heap
Funktionsende-> keine automatische Freigabe, sonst wäre ja auch meine Rückgabe nicht mehr da[nur um das nochmal anzufügen, der Code funktioniert so, ohne Warnung oder Fehler]
-
char *mychar = foo(10); free(mychar);
das wärs oder?
-
Nur der Pointer "char* cArr" wird freigegeben, aber nicht der Speicherbereich, auf den er (UND der Rückgabewert) zeigen.
Den Speicher wieder mit free freizugeben, steht in deiner Verantwortung.
Das kannst du genausogut über den Pointer, der zurückgeliefert wird.
(Das OS schaut nach dem Inhalt des Pointers um zu wissen, welchen Speicherbereich du reserviert hast. Nicht auf den Pointer selber.)
-
Ich will es als Rückgabe um
printf("%s",foo(10));
ohne weitere Deklarationn zu verwenden. Mit deiner Methode, könnt ich es auhc als Parameter übergeben, und wüsste wenigsten warum es funktioniert
-
so ist aber der Pointer und damit der reservierte Speicher futsch
-
Also waren meine Überlegungen richtig, und es geht nicht so wie ich es gern hätte???
-
Offensichtlich.
Falls du auf C nicht festgenagelt bist und du einfach nur einen String mit 9 Zeichen zurückliefern möchtest, bieten dir die C++ Strings eine gute Alternative. Dort ist es zulässig, Strings temporär zurückzuliefern, die sich danach wieder in wohlgefallen auflösen
-
mnhg schrieb:
Ich will es als Rückgabe um
printf("%s",foo(10));
ohne weitere Deklarationn zu verwenden. Mit deiner Methode, könnt ich es auhc als Parameter übergeben, und wüsste wenigsten warum es funktioniert
Das hier ist C,nicht VB
Mach einen statischen (threadlokalen) Puffer, der jedesmal ueberschrieben wird,bei einem neuen aufruf von foo(),bringt natuerlich die beschraenkung das zwischen 2 aufrufen von foo() der rueckgabewert nicht erhalten bleibt, aber das ist bei vielen funktionen der libc so.
-
die Funktion mit Rückgabewert char * finde ich schon ganz gut so.
So löse ich solche sachen auch. Die Freigabe l#uft in deinmem Fall einfach über den übergebenen Pointer, denn Pointer bleibt Pointer, und solange du die Speicherstelle immer im Visir hast, dann kannst du ihn auch freigeben mit free.
char *mychar = foo(10); free(mychar);
so gibst du den Speicher einfach wieder frei.
-
thomas001 schrieb:
Das hier ist C,nicht VB
Merkt man mir an das ich eigentlich VB-Progger bin??
Ich wollt mir halt C etwas in Richtung VB oder PHP drücken, aber im Zweifel kann ich auch mit der längeren Methode arbeiten.