
Hi, I am getting a segmentation fault , when I execute a code in hugs. (only some times) What are the conditions that give rise to a segmentation fault , when executing a Haskell code in hugs? I would appreciate very much if some could spare some time to help me. Thanks Chitra

Hi, I am getting a segmentation fault , when I execute a code in hugs. (only some times) What are the conditions that give rise to a segmentation fault , when executing a Haskell code in hugs? I would appreciate very much if some could spare some time to help me.
It is almost always a stack overflow. If it's not a stack overflow, it's a bug in Hugs but these are fairly rare. Stack overflows usually come from two sources: 1) Infinite loops, infinite recursion, etc. 2) Surprisingly deep stacks caused by the effects of lazy evaluation. For example, if you run Hugs with a sufficiently large heap then you can see this: Prelude> foldl (+) 0 [1..1000000] Segmentation fault This sort of error is accompanied by large heap usage so if you run with a smaller heap then it is possible that you'll run out of heap before you run out of stack. (It uses a lot of heap because what is happening is that Hugs builds a thunk representing the result in the heap and then recursively evaluates it using the stack.) To fix this, use a compiler with heap profiling (like ghc or nhc) and insert strictness annotations. For example, for this well known example, you'd use foldl' instead of foldl: Prelude> foldl' (+) 0 [1..1000000] 500000500000 (Note that foldl' is defined in the Prelude but not exported so you'll need to cut'n'paste it if you want to use it in your own code.) Hope this helps, -- Alastair Reid reid@cs.utah.edu http://www.cs.utah.edu/~reid/
participants (2)
-
Alastair Reid
-
ck15