Meine Frage ist in Bezug auf diese beiden Fälle:C - Rückgabe eines lokalen Zeiger vs lokale Variable
#include <stdio.h>
int *foo1();
int *foo2();
int main()
{
printf("so it's %d\n",*foo1());
printf("so it's %d\n",*foo2());
}
int *foo1()
{
int i1 = 5;
return &i1;
}
int *foo2()
{
int i2 = 5;
int *p = NULL;
p = &i2;
return p;
}
case1: Wenn sein der Fall mit foo1(), so erhalten wir einen Fehler, da wir zurückkehren wollen eine Kopie der Adresse Hauptdaten, die es wurde gelöscht
case2 (wenn wir foo1() Funktion verlassen): Aber in foo2(), es nicht gibt einen Fehler obwohl wir eine Kopie zurückkehren zu ein Zeiger der lokalen Variablen, dessen Daten gelöscht werden d nachdem wir die Funktion foo2() verlassen haben, warum ist das so?
TL; DR: Warum foo2() gibt keinen Fehler, aber foo1() tut?
TIA.
C oder C++? Auch, g ++, [gibt eine Warnung für beide] (http://coliru.stacked-crooked.com/a/5ee45849a93cd26d) – NathanOliver
Ich glaube, es hat etwas damit zu tun, dass * foo1 * einen rvalue während * foo2 zurückgibt * gibt einen Lvalue zurück, der eine gültige Rückgabe ist, obwohl die Zeigeradresse selbst ungültig ist. – abe
Warum das doppelte Tag? – StoryTeller