Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C Programming > Stack overflow

Reply
Thread Tools

Stack overflow

 
 
ip4ram@yahoo.com
Guest
Posts: n/a
 
      06-30-2004
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
 
Reply With Quote
 
 
 
 
James Hu
Guest
Posts: n/a
 
      06-30-2004
On 2004-06-30, http://www.velocityreviews.com/forums/(E-Mail Removed) <(E-Mail Removed)> 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
 
Reply With Quote
 
 
 
 
Richard Bos
Guest
Posts: n/a
 
      06-30-2004
(E-Mail Removed) 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
 
Reply With Quote
 
ip4ram@yahoo.com
Guest
Posts: n/a
 
      06-30-2004
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
(E-Mail Removed) (Richard Bos) wrote in message news:<(E-Mail Removed)>...
> (E-Mail Removed) 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

 
Reply With Quote
 
Malcolm
Guest
Posts: n/a
 
      06-30-2004

<(E-Mail Removed)> 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.


 
Reply With Quote
 
Peter Ammon
Guest
Posts: n/a
 
      07-01-2004
(E-Mail Removed) 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.
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
C/C++ compilers have one stack for local variables and return addresses and then another stack for array allocations on the stack. Casey Hawthorne C Programming 3 11-01-2009 08:23 PM
Why stack overflow with such a small stack? Kenneth McDonald Ruby 7 09-01-2007 04:21 AM
SDM Java stack overflow Art Cisco 1 02-18-2006 07:34 PM
smart navigation gives stack overflow Mr m?ll ASP .Net 2 10-16-2004 01:09 PM
Stack overflow exception =?Utf-8?B?amJpeEBuZXdzZ3JvdXBzLm5vc3BhbQ==?= ASP .Net 5 04-22-2004 04:48 AM



Advertisments