Grundlagen der Programmiersprache C
Welche Kombination gibt in C die Zeitspanne (Lebensdauer) richtig an, in der (1) eine in einer Funktion ohne static deklarierte lokale Variable, (2) ein mit malloc reservierter Bereich und (3) eine außerhalb von Funktionen deklarierte Variable existieren?
- A(1) bis zum Programmende, (2) bis zur Rückkehr aus der reservierenden Funktion, (3) bis zum Programmende
- B(1) bis zum Verlassen des deklarierenden Blocks, (2) bis zur Freigabe mit free, (3) bis zum Programmende
- C(1) bis zum Verlassen des deklarierenden Blocks, (2) bis zum Programmende (eine vorherige Freigabe ist nicht möglich), (3) bis zur Rückkehr aus der Funktion, die die Variable zuerst verwendet hat
Antwort und Erläuterung anzeigen
Antwort: B. (1) bis zum Verlassen des deklarierenden Blocks, (2) bis zur Freigabe mit free, (3) bis zum Programmende
Die automatische Variable in (1) liegt in der Regel auf dem Stack, wird beim Eintritt in den deklarierenden Block angelegt und verschwindet beim Verlassen. Der mit malloc reservierte Bereich in (2) liegt auf dem Heap, bleibt auch nach der Rückkehr aus der Funktion bestehen und ist nutzbar, bis er mit free freigegeben wird. Die Variable außerhalb von Funktionen in (3) (wie auch mit static versehene Variablen) existiert während der gesamten Programmausführung und liegt in einem statischen Bereich wie .data oder .bss. Häufige Fehlerursachen sind Zeiger auf Bereiche, deren Lebensdauer abgelaufen ist, und vergessene free-Aufrufe, durch die Bereiche dauerhaft belegt bleiben.
Weiter: 9 weitere Fragen zu Grundlagen der Programmiersprache C