Dies ist, was ich habe:Verweis auf Zeigerproblem?
void g(int *&x) {
int a = 3;
x = &a;
}
void h(const int *&x) {
int b = 2;
x = &b;
}
int main() {
int *p = new int;
*p = 5;
g(p);
cout << p << " " << *p << endl; // Print #2
cout << p << " " << *p << endl; // Print #3
const int*p1 = p;
h(p1);
cout << p << " " << *p << endl; // Print #4
cout << p << " " << *p << endl; // Print #5
}
Von dem, was ich verstehe, Print#2
und Print#3
das gleiche Ergebnis haben sollen, ist es aber nicht, wenn ich es kompilieren. Es geht um Print#4
und Print#5
auch. Kann mir jemand helfen?
Aktualisiert: Dies ist die Ausgabe wie folgt aussieht, wenn ich es auf meinem Computer zusammengestellt:
00EFF9D4 3 //1
00EFF9D4 1552276352 //2
00EFF9D4 2 //3
00EFF9D4 1552276352 //4
nicht (1) und (2) die gleiche sein? (3) und (4) entweder.
In der Funktion 'g', was ist' a'? Bitte erstellen Sie ein [minimales, vollständiges und überprüfbares Beispiel] (http://stackoverflow.com/help/mcve), um uns zu zeigen. Zeigen Sie uns auch die erwartete und tatsächliche Leistung. –
Wie für die Funktion "h", machen Sie den Zeiger auf eine lokale Variable, die den Gültigkeitsbereich verlässt und nicht mehr existiert, sobald die Funktion zurückkehrt. Die Dereferenzierung dieses Zeigers führt zu [* undefiniertem Verhalten *] (http://en.cppreference.com/w/cpp/language/ub), was das gesamte Programm * schlecht formatiert * und ungültig macht. –
Wahrscheinlich ein Tippfehler, der gemeint ist "int a". – Ron