Я удивлен, что никто еще не упомянул повреждение памяти.
Я помню случай, когда у нас был грубый распределитель памяти блоков фиксированного размера, реализованный в виде связанного списка.
Какой-то парень испортилувеличение размера, что приводит к копированию данных всего на пару байтов сверх максимального размера блока (указатели были только 2 байта длиной :)).Затем он перезапишет «следующую» ссылку, расположенную в начале следующего свободного блока, мусором, который оказался заполнен нулями.
Это привело к разрыву цепочки свободных блоков.Поскольку в этот момент другие части программного обеспечения поддерживали свои собственные указатели на те блоки, которые они использовали, программа, казалось, работала просто отлично.
Но, конечно, список время от времени заканчивался несколькими блоками,и эта утечка в конечном итоге исчерпала свободные блоки, из-за чего приложение умерло от голода.