At et program kompilerer betyr ikke at det virker. Minnesegmentfeil
betyr at du aksesserer minne som du ikke har tilgang til. Ofte er det
snakk om at du følger en NULL-peker, men det kan være mye annet også.
Dersom du kan kjøre dette i en debugger vil du se hvor og hvorfor det
feiler, eller du kan poste den relevante kildekoden her for å få hjelp.
Du unngår denne typen feil ved å forstå C, samt å ikke slurve.
MVH,
Anders
C har ikke innebygd "run-time checks" på ulovlig minne aksess. En rekke
metoder benyttes til å unngå slike feil:
1. assert() til å advare om parametre utenfor lovlig område
2. valgrind minne debugger
3. splint for statisk sjekk av kode
4. electric-fence, kræsje programmet ASAP
5. gdb av core fil, husk å kompiler med gcc -g flagget
6. alternative bibliotekfunksjoner
7. ikke bruke malloc'ed minne
8. GC
osv. osv.
Etter "minnesegmentfeil", så er post mortem debugging en effektiv metode
til å finne feil, f.eks. ser en gdb sessjon typisk slik ut:
gdb <program>: start debugger
core core : last inn core dump
bt: se på back trace
level 3: velg nivå 3 på "call stack"
print a: se verdien i variabel 'a'
...
--
Tor <bwz...@wvtqvm.vw | tr i-za-h a-z>
En kompilerer med mye advarsler slått på (med gcc, minimum -Wall
-Wextra), og bruker valgrind for å finne feilen når en får segfault.
Husk å kompilere med debug-info (-g) for å få mer verdifull
informasjon fra valgrind.
Vennlig hilsen,
--
Petter Reinholdtsen