VB6 Help: Fixing "Out of Stack Space" Error

  • Thread starter Thread starter madmike159
  • Start date Start date
Click For Summary
SUMMARY

The forum discussion addresses the "Out of Stack Space" error encountered in Visual Basic 6 (VB6) when calculating the factorial of large numbers, specifically those exceeding 200,000. The error arises due to excessive recursive calls that consume stack memory. A suggested solution involves eliminating recursion by using a large 2-dimensional array to manage bookkeeping and steps, although this approach may also lead to significant memory consumption. The user successfully resolved the issue by consolidating the logic into a single subroutine.

PREREQUISITES
  • Understanding of Visual Basic 6 (VB6) programming
  • Knowledge of recursion and its implications on stack memory
  • Familiarity with data structures, specifically arrays
  • Basic concepts of memory management in programming
NEXT STEPS
  • Explore iterative algorithms as alternatives to recursion in VB6
  • Learn about memory management techniques in Visual Basic 6
  • Investigate the use of large arrays for complex calculations
  • Research optimization strategies for handling large numerical computations
USEFUL FOR

VB6 developers, programmers dealing with large numerical computations, and anyone encountering stack overflow issues in recursive algorithms.

madmike159
Gold Member
Messages
369
Reaction score
0
VB6 Help out of stack"

I was writing a program to work out factorials of large numbers. The doubble varible over flows at 9E+308. I work out some of the factorial then move to another subroutine and divide by ten until it is < 10 then continue timising it by integers. In the end I am left with a decimal number < 10 and another number which represents the exponant.

If I try to find the factorial of a very large number (200000+) it gives me an error "out of stack space", which I think is because it creats a stack to keep track of when you move between subroutine. I use the Call command, does anyone know a different command or a way to stop it running out of stack space?

Thanks:biggrin:
 
Technology news on Phys.org


I assume your factorial is written using recursion (where a subroutine calls itself repeatedly). Each subroutine call adds all the local variables in your subroutine to the stack for each recursive call. So eventually there is not enough room in the computer's memory to stack anything more.

It is usually possible to solve "recursive" algorithms in a program without actually using recursion. To do so, you'll need a huge 2-dimensional array. One dimension holds all the bookkeeping you would normally store in the local variables for one recursive call; the other dimension is used for the successive steps in the recursive algorithm. It's not at all clear that you would be able to compute the factorial of larger numbers this way, since it will also consume a lot of memory. That's because the algorithm itself is going to repeat about a gazillion steps (that's more than a brazillion, by the way).

You might be able to do larger numbers by doubling the RAM (memory) in your computer. But you won't really get orders of magnitude improvement.
 


I moved it all into one subroutine and it works very well, thanks for the help.
 

Similar threads

Replies
12
Views
2K
  • · Replies 1 ·
Replies
1
Views
11K
  • · Replies 1 ·
Replies
1
Views
3K
Replies
6
Views
3K
Replies
1
Views
2K
  • · Replies 8 ·
Replies
8
Views
4K
Replies
5
Views
4K
  • · Replies 18 ·
Replies
18
Views
7K
  • · Replies 4 ·
Replies
4
Views
8K
  • · Replies 1 ·
Replies
1
Views
4K