Skip to main content

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 overtrædelse af opbevaring.

Selvom der kan oprettes en segmenteringsfejl i nogleComputersprog lettere end andre, segfaults er 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 relativt let med dårlig programmering.Sprog, der ikke tillader eksplicit hukommelsesstyring, som Java, håndterer de fleste hukommelsesproblemer uden programmerernes interferens, og minimerer derfor segmenteringsfejl ved at give en programmør ingen måde at målrettet adgang til områder uden for tildelt hukommelse.

måderne, hvorpå en programmør kanOpret 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ænsekontrol, der forventer denne type fejl og vil ikke lade brugeren forsøge at få adgang til en ugyldig slot.

Der kan genereres en mindre almindelig måde, hvorpå segfaults kan genereres, når to computersprog passerer data mellem hinanden ved hjælp af enproxy.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ænsekontrol og tillader ikke 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 skal være megetForsigtig 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 programmerere chancer for at skabe et robust, fejlfrit program.