In de C-taal worden variabelen met automatische opslagruimte (auto, standaard) op de stack aangemaakt wanneer je in hun zichtbaarheid komt (meestal een functie) en worden ze automatisch vernietigd bij het verlaten ervan.
Kenmerken zijn onder andere:
Voorbeeld van correct en onjuist gebruik:
int* wrong() { int x = 42; return &x; // FOUT: x wordt vernietigd na het verlaten van de functie } void correct() { int y = 123; printf("%d\n", y); // alles goed }
Wat gebeurt er als je het adres van een lokale variabele uit een functie retourneert?
Veelvoorkomend fout antwoord: "De pointer behoudt zijn waarde".
Juist antwoord: Het geretourneerde adres wordt ongeldig na het verlaten van de functie, het geheugen wordt opnieuw toegewezen voor andere automatische variabelen of functies. Het gebruik van zo'n pointer is onvoorspelbaar gedrag.
Voorbeeld:
int* myfunc() { int temp = 10; return &temp; // temp wordt vernietigd na de return } int main() { int* p = myfunc(); printf("%d\n", *p); // ONVOORSPELBAAR GEDRAG }
Verhaal
Verhaal
Verhaal
In de firmware van een medische registrator was er een cache op de stack geïmplementeerd om de gegevensverwerking te versnellen. Bij belasting voldeed de stack, wat leidde tot herstarts van het apparaat en verlies van patiëntgegevens.