Forum: C-Programmieren
Moderatoren: juergen, Martin ConradThema: Zeiger als Rückgabewert
Zeiger als Rückgabewert
herculutz am 24.03.2004 um 14:32
Kann man in einer Funktion eine Zeiger deklarieren, und den dann ins main() zurückgeben? Also so:
char *funktion(void)
{
char namen[]="Herculutz";
char *ptr=namen;
return ptr;
}
Funktioniern tuts, aber der Speicher wurde doch in der Funktion angelegt, und wenn die Funktion beendet wird, was passiert dan mit dem Speicherbereich? Kann der dann von anderen Variablen benutzt werden?
Lutz
--
/* Was soll das Gerede mit der `Freigabe´? Wir lassen die Software aus ihrem Käfig, damit sie eine blutige Spur von Designern, Qualitätsprüfern und Usern hinter sich herzieht. */
Zeiger als Rückgabewert
juergen (webmaster) am 25.03.2004 um 07:10
Bei mir Funktioniert dies nicht (Linux gcc) da nach Funktionsaufruf der Stack ja wieder freigegeben wird. Damit diese Adresse im Datensegment zur Verfügung steht solltest Du diese mit static beschmücken:
#include <stdio.h>
char *
funktion (void)
{
char namen[] = "Herculutz";
char *ptr = namen;
return ptr;
}
int
main ()
{
char *test = funktion();
printf ("%s\n", test);
return 0;
}
Gruss
Jürgen Wolf
Zeiger als Rückgabewert
herculutz am 25.03.2004 um 18:39
das dachte ich mir schon fast. Danke für deine Hilfe.
Im Open Book stehts dann nämlich falsch drin. Da wird das nämlich so gemacht.
Lutz
--
/* Was soll das Gerede mit der `Freigabe´? Wir lassen die Software aus ihrem Käfig, damit sie eine blutige Spur von Designern, Qualitätsprüfern und Usern hinter sich herzieht. */
Zeiger als Rückgabewert
jengelh am 26.03.2004 um 15:20
Zitat:
juergen schrieb:
Bei mir Funktioniert dies nicht (Linux gcc) da nach Funktionsaufruf der Stack ja wieder freigegeben wird. Damit diese Adresse im Datensegment zur Verfügung steht solltest Du diese mit static beschmücken:
static fuer Variablen, die nicht global sind ist evil. Ausserdem sehe ich kein einziges "static" in deinem Beispiel.
Zeiger als Rückgabewert
herculutz am 26.03.2004 um 19:29
Und wie machst du das? Mit malock und co? Außerdem ist der Fehler immernoch im Buch.
Der Nachteil bei static ist, das wenn ich die Funktion das 2. mal aufruf, ich den zurückgegebenen Zeiger des 1. Aufrufens nicht weiter im Hauptbrogramm verwenden kann, da sich ja der Inhalt ändert.
Lutz
--
/* Was soll das Gerede mit der `Freigabe´? Wir lassen die Software aus ihrem Käfig, damit sie eine blutige Spur von Designern, Qualitätsprüfern und Usern hinter sich herzieht. */
