Stack overflow

Discussion in 'C Programming' started by ip4ram@yahoo.com, Jun 30, 2004.

  1. Guest

    I am quite puzzled by the stack overflow which I am encountering.Here
    is the pseudocode

    //define stack structure

    //function operating on stack
    void my_stack_function( function parameters)
    {
    do required stuff
    if(some conditions obeyed)
    call my_stack_function(function parameters);
    }

    //in main()
    {
    initial conditions;
    if(conditions obeyed)
    {
    call my_stack_function(function parameners);
    call a_function_to_pop_contents_of_stack();


    }
    }
    The conditions are so set that my_stack_function is not called
    infinite number of times. I get a stack overflow when executing this.I
    am not sure if I made any logical error.Does anybody see any silly
    logic??

    Thanks for your help
    Ram
    , Jun 30, 2004
    #1
    1. Advertising

  2. James Hu Guest

    On 2004-06-30, <> wrote:
    > I am quite puzzled by the stack overflow which I am encountering.Here
    > is the pseudocode


    This is not a C question. If you need additional help beyond my post,
    you should probably consult comp.programming (where follow-ups have been
    redirected).

    >
    > //define stack structure
    >
    > //function operating on stack
    > void my_stack_function( function parameters)
    > {
    > do required stuff
    > if(some conditions obeyed)
    > call my_stack_function(function parameters);
    > }
    >
    > //in main()
    > {
    > initial conditions;
    > if(conditions obeyed)
    > {
    > call my_stack_function(function parameners);
    > call a_function_to_pop_contents_of_stack();
    >
    >
    > }
    > }
    > The conditions are so set that my_stack_function is not called
    > infinite number of times. I get a stack overflow when executing this.I
    > am not sure if I made any logical error.Does anybody see any silly
    > logic??


    Even if you limit your recursion depth to a finite number, it is still
    possible to run out of memory by calling the function recursively too
    many times.

    Two things to try are:

    (1) turn up the optimizations on your compiler. Your function is
    tail recursive and a good optimizing compiler can remove the
    recursion for you, or

    (2) remove the recursion in your function.

    Simplistically, your function can be rewritten without recursion
    like this:

    void my_stack_function(function parameters)
    {
    loop:
    do required stuff
    if(some conditions obeyed)
    goto loop;
    }

    But this assumes that when you call your function recursively,
    you are just continuing to pass the same variables that were
    passed before (but were modified in the "do required stuff").

    -- James
    James Hu, Jun 30, 2004
    #2
    1. Advertising

  3. Richard Bos Guest

    wrote:

    > //define stack structure
    >
    > //function operating on stack
    > void my_stack_function( function parameters)
    > {
    > do required stuff
    > if(some conditions obeyed)
    > call my_stack_function(function parameters);
    > }
    >
    > //in main()
    > {
    > initial conditions;
    > if(conditions obeyed)
    > {
    > call my_stack_function(function parameners);
    > call a_function_to_pop_contents_of_stack();
    > }
    > }
    > The conditions are so set that my_stack_function is not called
    > infinite number of times. I get a stack overflow when executing this.I
    > am not sure if I made any logical error.Does anybody see any silly
    > logic??


    Why, yes. The silly logic is in thinking that your code can be analysed
    for silly errors when you don't even provide your code. The error is
    most likely to be in your conditions or your stack definition; why did
    you not post them?

    Richard
    Richard Bos, Jun 30, 2004
    #3
  4. Guest

    Hi Richard,

    I know I am doing injustice to the groups by asking them for help,but
    not posting the code.The pseudocode ,which I have posted here, is a
    part of much larger and very complex image processing
    algorithm.However,if you are still interested in the code,I can mail
    the relevant portion to you.

    Ram
    (Richard Bos) wrote in message news:<>...
    > wrote:
    >
    > > //define stack structure
    > >
    > > //function operating on stack
    > > void my_stack_function( function parameters)
    > > {
    > > do required stuff
    > > if(some conditions obeyed)
    > > call my_stack_function(function parameters);
    > > }
    > >
    > > //in main()
    > > {
    > > initial conditions;
    > > if(conditions obeyed)
    > > {
    > > call my_stack_function(function parameners);
    > > call a_function_to_pop_contents_of_stack();
    > > }
    > > }
    > > The conditions are so set that my_stack_function is not called
    > > infinite number of times. I get a stack overflow when executing this.I
    > > am not sure if I made any logical error.Does anybody see any silly
    > > logic??

    >
    > Why, yes. The silly logic is in thinking that your code can be analysed
    > for silly errors when you don't even provide your code. The error is
    > most likely to be in your conditions or your stack definition; why did
    > you not post them?
    >
    > Richard
    , Jun 30, 2004
    #4
  5. Malcolm Guest

    <> wrote
    >
    > I am quite puzzled by the stack overflow which I am encountering.Here
    > is the pseudocode
    >
    > //define stack structure
    >
    > //function operating on stack
    > void my_stack_function( function parameters)
    > {
    > do required stuff
    > if(some conditions obeyed)
    > call my_stack_function(function parameters);
    > }
    >
    > //in main()
    > {
    > initial conditions;
    > if(conditions obeyed)
    > {
    > call my_stack_function(function parameners);
    > call a_function_to_pop_contents_of_stack();
    > }
    > }
    > The conditions are so set that my_stack_function is not called
    > infinite number of times. I get a stack overflow when executing this.I
    > am not sure if I made any logical error.Does anybody see any silly
    > logic??
    >

    We can only guess from pseudo-code. The obvious candidate is that you call a
    function to pop the stack after the recursvie calls have terminated. However
    in a typical recursive system you should be popping the stack each time the
    recursive function yields control.
    Malcolm, Jun 30, 2004
    #5
  6. Peter Ammon Guest

    wrote:

    > I am quite puzzled by the stack overflow which I am encountering.Here
    > is the pseudocode
    >
    > //define stack structure
    >
    > //function operating on stack
    > void my_stack_function( function parameters)
    > {
    > do required stuff
    > if(some conditions obeyed)
    > call my_stack_function(function parameters);
    > }
    >
    > //in main()
    > {
    > initial conditions;
    > if(conditions obeyed)
    > {
    > call my_stack_function(function parameners);
    > call a_function_to_pop_contents_of_stack();
    >
    >
    > }
    > }
    > The conditions are so set that my_stack_function is not called
    > infinite number of times. I get a stack overflow when executing this.I
    > am not sure if I made any logical error.Does anybody see any silly
    > logic??
    >
    > Thanks for your help
    > Ram


    This answer is OT in C, but some OSes (Unixes in particular) artficially
    limit the stack size. You can usually turn this off with e.g. the
    ulimit command. Try that.

    --
    Pull out a splinter to reply.
    Peter Ammon, Jul 1, 2004
    #6
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. =?Utf-8?B?amJpeEBuZXdzZ3JvdXBzLm5vc3BhbQ==?=

    Stack overflow exception

    =?Utf-8?B?amJpeEBuZXdzZ3JvdXBzLm5vc3BhbQ==?=, Apr 20, 2004, in forum: ASP .Net
    Replies:
    5
    Views:
    7,231
    Rick Spiewak
    Apr 22, 2004
  2. Mr m?ll
    Replies:
    2
    Views:
    1,394
    Mr m?ll
    Oct 16, 2004
  3. Replies:
    0
    Views:
    486
  4. Replies:
    0
    Views:
    399
  5. Kenneth McDonald

    Why stack overflow with such a small stack?

    Kenneth McDonald, Aug 30, 2007, in forum: Ruby
    Replies:
    7
    Views:
    246
    Kenneth McDonald
    Sep 1, 2007
Loading...

Share This Page