Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Minnesegmentfeil

8 views
Skip to first unread message

A

unread,
Nov 24, 2007, 6:47:15 PM11/24/07
to
Etter kompilering uten feil, kjøres et lite program fra terminalvindu.
Da kommer feilmeldingen "minnesegmentfeil" og programmet stopper uten heng.
Hvordan unngår man slik feil?


Anders

unread,
Nov 24, 2007, 9:56:56 PM11/24/07
to

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

Tor Rustad

unread,
Nov 24, 2007, 11:37:56 PM11/24/07
to

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>

Petter Reinholdtsen

unread,
Nov 29, 2007, 9:12:14 AM11/29/07
to

[A]

> Etter kompilering uten feil, kjøres et lite program fra
> terminalvindu. Da kommer feilmeldingen "minnesegmentfeil" og
> programmet stopper uten heng. Hvordan unngår man slik feil?

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

0 new messages