Hvad er en segmenteringsfejl?
En segmenteringsfejl er en computerfejl, der opstår, når et program forsøger at få adgang til en hukommelsesregion på en ugyldig måde. Disse fejl kan læses fejl, hvor der gøres et forsøg på at læse data, der ikke er blevet initialiseret korrekt, eller skrivefejl, hvor et program forsøger at skrive data til et forkert placering i hukommelsen. I computerparlance forkortes udtrykket ofte til SegFault. Da SEGFAULTS kan forekomme i både datalæsning og skrivning, kan de forekomme i forskellige sammenhænge og med forskellige specifikke navne, herunder busfejl, bufferoverløb, sidefejl og opbevaringsovertrædelser.
Selvom en segmenteringsfejl kan oprettes på nogle computersprog lettere end andre, er SegFaults ikke en del af computersprog selv. I teorien kan ethvert computersprog forårsage en dataskrivningsfejl, der gyder et segfault. Computersprog, der giver en programmerer mulighed for eksplicit at håndtere hukommelse, såsom C ++, giver brugeren mulighed for at introducere utilsigtede SegFaults relatively let med dårlig programmering. Sprog, der ikke tillader eksplicit hukommelsesstyring, som Java, håndterer de fleste hukommelsesproblemer uden programmørens interferens, og minimerer derfor segmenteringsfejl ved at give en programmerer ingen måde til målrettet at få adgang til områder uden for tildelt hukommelse.
De måder, hvorpå en programmør kan oprette en segmenteringsfejl, varierer, afhængigt af den måde, hvorpå data bruges. Der er visse konstruktioner, der er lettere at oprette denne fejl med. En almindelig skyldige af et SegFault er en matrixoverløbsfejl, hvor specifikke data er indeholdt i slots inden for et bestemt hukommelsessted, men programmereren forsøger at få adgang til en slot, der ikke findes. Segfaults, der er skabt af disse situationer, er ofte vanskelige at spore. Nogle computersprog har grænser kontrol, som forudser denne type fejl og vil ikke lade brugeren forsøge at få adgang til en uvurderligid slot.
En mindre almindelig måde, hvorpå segfaults kan genereres, opstår, når to computersprog passerer data mellem hinanden ved hjælp af en proxy. I denne sammenhæng er en segmenteringsfejl særlig vanskelig at diagnosticere, fordi det ikke altid er klart, hvilket sprog eller lag med programmeringskode, fejlen kommer fra. Selv hvis et lag har implicit grænser for grænser og ikke tillader SegFaults i 99,9% af sammenhænge, kan det være et meget tidskrævende og kedeligt job at bestemme, hvor fejlen kom fra.
Den bedste måde at undgå segmenteringsfejl er at være meget forsigtig med hukommelsesstyring. De fleste gode programmeringspraksis anbefaler, at brugere eksplicit skal frigøre enhver byte af hukommelse, der manuelt tildeles i et program. Dette er ofte vanskeligt at gøre, men at gøre det korrekt øger en programmeres chancer for at skabe et robust, fejlfrit program.