Basis van programmeren in C
int *make(void) {
int x = 42;
return &x;
}Wat is juist over de pointer die de bovenstaande functie make teruggeeft?
- Ax blijft tot het einde van het programma op dezelfde plek staan, dus via de teruggegeven pointer kan altijd veilig 42 worden gelezen
- Bx wordt bij het terugkeren naar de heap verplaatst, dus de aanroeper moet het na gebruik met free vrijgeven
- CDe levensduur van x eindigt als de functie terugkeert, dus de teruggegeven pointer wijst naar een ongeldige plek, en gebruik ervan is ongedefinieerd gedrag
Antwoord en toelichting tonen
Antwoord: C. De levensduur van x eindigt als de functie terugkeert, dus de teruggegeven pointer wijst naar een ongeldige plek, en gebruik ervan is ongedefinieerd gedrag
x is een lokale variabele zonder static (een automatische variabele); haar levensduur eindigt als de functie terugkeert, en de plek op de stack die ze innam, wordt door andere functieaanroepen hergebruikt. Een pointer die wijst naar een gebied waarvan de levensduur is afgelopen, heet een dangling pointer, en lezen of schrijven via zo'n pointer is ongedefinieerd gedrag. gcc geeft voor deze code een waarschuwing en kan zelfs code genereren die NULL teruggeeft. Geef de waarde zelf terug, of gebruik een gebied dat de aanroeper heeft voorbereid of dat met malloc is gereserveerd.