2016-12-06 6 views
-1

Was passiert, wenn ein Zeiger auf eine lokale Variable von einer Funktion zurückgegeben wird?Zeiger auf eine lokale Variable zurückgeben

zum Beispiel

int* foo() 
{ 
    int local; 
    int* ptr = &local; 
    return ptr; 
} 

Ausgabe Compiler wird eine Warnung oder wird es kompilieren und zu unerwarteten Ergebnissen führen ??

+2

warum versuchst du es nicht? – slawekwin

+0

int * foo() { int lokal = 42; int * ptr = &local; Rückkehr ptr; } Int Haupt() { Rückkehr * (foo()); } –

+0

Dies sollte offensichtlich sein: Die Lebensdauer einer lokalen Variablen ist der Funktionsaufruf. –

Antwort

2

ähnliche Art von Frage bereits gestellt: Stack Overflow, local pointer

Es gibt Somethings in C, die für Compiler-Anbieter verlassen wird in der Art und Weise zu implementieren, sie mögen. Das Verhalten solcher Dinge wird nicht von den Machern definiert. Compiler-Anbieter können solche Dinge so implementieren, wie sie sich einfach und schneller fühlen. Dies fällt in die gleiche Kategorie. Das Verhalten ist nicht definiert und hängt vom verwendeten Compiler ab.

Eine weitere Sache ist die Verwendung von mehr als einem Vorinkrement (Vordekrement) und/oder Nachinkrement (Nachdekrement). Wenn derselbe Code auf verschiedenen Compilern ausgeführt wird, erhalten Sie möglicherweise eine andere Ausgabe.

+1

Weitere Informationen zu UB finden Sie unter http://stackoverflow.com/questions/2397984/undefined-unspecified-and-implementation-defined-behavior, wo Sie alle benötigten Informationen finden – stefaanv

4

Was passiert, wenn ein Zeiger auf eine lokale Variable von einer Funktion zurückgegeben wird?

Undefiniertes Verhalten. Alles kann passieren. Der Compiler wird Sie warnen. Diese

ist g++ Warnung für diesen Fehler:

g++ -Wall -std=c++11 -O3 test.cpp -o test 
warning: function returns address of local variable [-Wreturn-local-addr] 
+0

GCC gibt keine Warnung, auch nicht mit -Wall -Wextra -Werror –

+0

@WARhead Bitte lesen Sie dies auf was ist undefiniertes Verhalten: http://StackOverflow.com/Questions/2397984/undefined-unspecified-and-implementation-defined -behavior – alexeykuzmin0

+0

Sie sollten g ++ für .cpp-Datei verwenden – artm

Verwandte Themen