Pamięć jest „nadeptywana”, gdy fragment kodu manipuluje pamięcią, nie zdając sobie sprawy, że inny fragment kodu używa tej pamięci w sposób powodujący konflikt. Istnieje kilka typowych sposobów nadepnięcia na pamięć.
Jeden z nich przydziela, powiedzmy, 100 bajtów pamięci, ale potem zapisuje coś poza setnym adresem. Ta pamięć może służyć do przechowywania czegoś zupełnie innego. Jest to szczególnie trudne do debugowania, ponieważ problem pojawi się, gdy coś spróbuje uzyskać dostęp do nadepniętej ofiary, a kod, który nadepnął, może być całkowicie niezwiązany.
Innym jest dostęp do pamięci po jej zwolnieniu. Pamięć może być przydzielona dla innego obiektu. Ponownie, kod, który pokazuje problem, może być powiązany z nowo przydzielonym obiektem, który otrzymał ten sam adres i niezwiązany z kodem, który spowodował problem.