Grundlagen der Programmiersprache C
int *make(void) {
int x = 42;
return &x;
}Was trifft auf den Zeiger zu, den die obige Funktion make zurückgibt?
- Ax bleibt bis zum Programmende an derselben Stelle, daher kann über den zurückgegebenen Zeiger jederzeit sicher 42 gelesen werden
- Bx wird bei der Rückkehr auf den Heap verschoben, daher muss der Aufrufer es nach der Verwendung mit free freigeben
- CDie Lebensdauer von x endet mit der Rückkehr aus der Funktion, daher zeigt der zurückgegebene Zeiger auf eine ungültige Stelle, und seine Verwendung ist undefiniertes Verhalten
Antwort und Erläuterung anzeigen
Antwort: C. Die Lebensdauer von x endet mit der Rückkehr aus der Funktion, daher zeigt der zurückgegebene Zeiger auf eine ungültige Stelle, und seine Verwendung ist undefiniertes Verhalten
x ist eine lokale Variable ohne static (automatische Variable); ihre Lebensdauer endet mit der Rückkehr aus der Funktion, und ihr Platz auf dem Stack wird von anderen Funktionsaufrufen wiederverwendet. Ein Zeiger auf einen Bereich, dessen Lebensdauer abgelaufen ist, heißt Dangling Pointer, und Lesen oder Schreiben über ihn ist undefiniertes Verhalten. gcc warnt vor dieser Schreibweise und erzeugt mitunter Code, der NULL zurückgibt. Abhilfe: den Wert selbst zurückgeben oder einen vom Aufrufer bereitgestellten oder mit malloc reservierten Bereich verwenden.
Weiter: 9 weitere Fragen zu Grundlagen der Programmiersprache C