Podobnie zakończy się próba zapisu z poniższego kodu:

int *ptr = NULL; *ptr = 1;

Przepełnienie bufora

Przepełnienie stosu

Kolejnym przykładem błędu mogącego doprowadzić do błędu naruszenia ochrony pamięci jest przepełnienie stosu, które można uzyskać rekurencyjnym wywołaniem funkcji nie posiadającym warunku zakończenia:What is the difference between a segmentation fault and a stack overflow?

int main(void) { main(); return 0;

Powyższy kod z uwagi na włączoną optymalizację w kompilatorze może prowadzić do różnych zachowań w powyższym fragmencie: Wynikowy program wykonywalny może: nie zgłosić błędu i wykonywać się w sposób ciągły (usunięcie nieosiągalnego return 0 oraz zamienienie na iterację) zgłosić błąd naruszenia ochrony pamięci (gdy ramka stosu nie jest kontrolowana) zgłosić błąd przepełnienia stosu, gdy system obsługuje kontrolę ramki stosu.

Zobacz też ogólny błąd ochrony Rekurencja ogonowa Przepełnienie stosu Przepełnienie bufora

Przypisy

Kategoria:Błędy programów komputerowych