Błąd segmentacji to błąd komputera, który występuje, gdy program próbuje uzyskać dostęp do regionu pamięci w nieprawidłowy sposób. Błędy te mogą być błędami odczytu, gdy podejmowana jest próba odczytu danych, które nie zostały prawidłowo zainicjowane, lub błędami zapisu, gdy program próbuje zapisać dane w niewłaściwym miejscu pamięci. W żargonie komputerowym termin ten jest często skracany do segfault. Ponieważ błędy segfault mogą wystąpić zarówno podczas odczytu, jak i zapisu danych, mogą występować w różnych kontekstach i pod różnymi nazwami, w tym błędy magistrali, przepełnienia bufora, błędy stron i naruszenia pamięci.
Chociaż błąd segmentacji można utworzyć w niektórych językach komputerowych łatwiej niż w innych, segfaulty nie są częścią samych języków komputerowych. Teoretycznie każdy język komputerowy może powodować błąd zapisu danych, który powoduje segfault. Języki komputerowe, które pozwalają programiście jawnie obsługiwać pamięć, takie jak C++, pozwalają użytkownikowi stosunkowo łatwo wprowadzić niezamierzone segfaulty przy słabym programowaniu. Języki, które nie pozwalają na jawne zarządzanie pamięcią, takie jak Java, obsługują większość problemów z pamięcią bez ingerencji programisty, a zatem minimalizują błędy segmentacji, nie dając programiście możliwości celowego dostępu do obszarów poza przydzieloną pamięcią.
Sposoby, w jakie programista może stworzyć błąd segmentacji, różnią się w zależności od sposobu wykorzystania danych. Istnieją pewne konstrukcje, za pomocą których łatwiej jest stworzyć ten błąd. Jednym z powszechnych winowajców segfault jest błąd przepełnienia tablicy, w którym określone dane są zawarte w gniazdach w określonej lokalizacji pamięci, ale programista próbuje uzyskać dostęp do gniazda, które nie istnieje. Segfaulty powstałe w takich sytuacjach są często trudne do wyśledzenia. Niektóre języki komputerowe mają funkcję sprawdzania granic, która przewiduje ten rodzaj błędu i nie pozwala użytkownikowi na próbę uzyskania dostępu do nieprawidłowego gniazda.
Mniej powszechny sposób generowania segfaultów występuje, gdy dwa języki komputerowe przekazują dane między sobą za pomocą serwera proxy. W tym kontekście błąd segmentacji jest szczególnie trudny do zdiagnozowania, ponieważ nie zawsze jest jasne, z jakiego języka lub warstwy kodu programu pochodzi błąd. Nawet jeśli jedna warstwa ma niejawne sprawdzanie granic i nie pozwala na segfaulty w 99.9% kontekstów, określenie źródła błędu może być bardzo czasochłonne i żmudne.
Najlepszym sposobem na uniknięcie błędów segmentacji jest bardzo ostrożne zarządzanie pamięcią. Większość dobrych praktyk programistycznych zaleca, aby użytkownicy jawnie zwalniali każdy bajt pamięci, który został ręcznie przydzielony w programie. Jest to często trudne do wykonania, ale prawidłowe wykonanie tego zadania zwiększa szanse programisty na stworzenie solidnego, wolnego od błędów programu.