Pointer zu Variable in einer Funtion zurückgeben
-
Hallo,
hier ist die funktion
int *pointer(int value) { return (&value); }
Wenn ich diese Funktion verwende, sagt der gcc:
gcc schrieb:
warning: function returns address of local variable [enabled by default]
Warum darf ich das so nicht machen?
-
Weil die Variable "value" nur innerhalb der Funktion existiert. Du gibst aber einen Zeiger auf diese nach aussen. Mit diesem Zeiger kann der Aufrufer Speicher manipulieren, der ihm nicht gehört.
-
LordJaxom schrieb:
Weil die Variable "value" nur innerhalb der Funktion existiert. Du gibst aber einen Zeiger auf diese nach aussen. Mit diesem Zeiger kann der Aufrufer Speicher manipulieren, der ihm nicht gehört.
ok, wie könnte man das problem lösen?
-
weil die lokalen variablen automatisch nach der funktion zerstoert werden und damit ihre adressen ungueltig sind
-
das frage ist was dein eigentliches problem ist was du damit loesen wolltest
-
c++; c--; schrieb:
ok, wie könnte man das problem lösen?
Keinen Zeiger auf lokale Variablen zurückgeben?
Klingt jetzt etwas platt, aber bis auf "Compiler meldet ..." hast Du uns kein Problem geschildert. Also, welches (übergeordnete) Problem möchtest Du lösen?
-
LordJaxom schrieb:
c++; c--; schrieb:
ok, wie könnte man das problem lösen?
Keinen Zeiger auf lokale Variablen zurückgeben?
Klingt jetzt etwas platt, aber bis auf "Compiler meldet ..." hast Du uns kein Problem geschildert. Also, welches (übergeordnete) Problem möchtest Du lösen?
int *pointer(int value) { int *value2=value; return value2; }
das wäre die einzige lösung, oder?
-
Nein, das gleiche Prinzip (wenn du korrekt die Adresse übergeben hättest).
Du musst den Speicher via malloc erzeugen.
Aber was ist dein Problem.
-
Die beste Lösung wäre, schon einen Zeiger an die Funktion zu übergeben.
Ist da noch mehr in der Funktion oder willst du nur mehr Text für das & haben?
Das geht auch mit einem Makro.
-
DirkB schrieb:
Die beste Lösung wäre, schon einen Zeiger an die Funktion zu übergeben.
Ist da noch mehr in der Funktion oder willst du nur mehr Text für das & haben?
Das geht auch mit einem Makro.nein das war jetzt nur ein beispiel.
im richtigen quellcode ist das etwas complexer.du meinst also sowas:
int *pointer(int *value) { return value; }
?
mhh.. also ich glaub, das man das es durchaus ok ist, wenn man die adresse von einer funtkions-variable zurückgibt.
-
asdfasdfasdfasdfasdfasdf schrieb:
du meinst also sowas:
int *pointer(int *value) { return value; }
?
Ja klar.asdfasdfasdfasdfasdfasdf schrieb:
mhh.. also ich glaub, das man das es durchaus ok ist, wenn man die adresse von einer funtkions-variable zurückgibt.
Nein