Stack size question

I get a stack overflow error at run time...

How do i increase the stack size in Borland's Turbo C++ 4.5?

Jeff
jkelly061597Asked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

nietodCommented:
If this is a windows program the stack size specified is the initial stack size, the stack will grow as needed so you shouldn't run into a stack overflow unless you have a bug.  (Or iif you know that you legitimately use a LOT of stack space.)  So if this is a windows program that doesn't have unusual stack usage, look for a bug, like infinite recursion instead of changing the stack space.  If this is a DOS program, you might be running out of stack space, so ignore this.
0
chensuCommented:
I guess it is a DOS program. Do you use any large array allocated on the stack like the following? Use dynamic allocation instead (C++ operator new and delete) or simply define it as a static or global variable allocated on the heap.

void MyFunc()
{
    ...
    char achBuf[2048];
    ...
}

Another possible reason causing this is a deep recursive function.
0
jkelly061597Author Commented:
I have a large array of classes... would this fit the large array description?
0
Build an E-Commerce Site with Angular 5

Learn how to build an E-Commerce site with Angular 5, a JavaScript framework used by developers to build web, desktop, and mobile applications.

chensuCommented:
Yes.
0
chensuCommented:
Just try putting "static" there to see whether the error still exists. If not, this should be an answer. :-)


void MyFunc()
{
    ...
    static CMyClass myObjects[2048];
    ...
}

I would suggest using dynamic allocation instead of using static or global variables. Using static or global variables will make your executable files bigger.
0
RONSLOWCommented:
In DOS you are more limited in your address space .. there isn't any virtual memory, so when it is full, it is full.
0
nietodCommented:
However, in DOS you can set the stack size.  And this is the maximum stack size, since the stack does no grow, so it is important.  However, you are limited to a pretty small stack so your best bet is probably to reduce your stack usage as Chensu suggested (since it seems like you are unneccesarily using stack space).  

I would tell you how to set stack size, just so you know, but I'm using VC 5.0 which doesn't produce DOS programs, so I don't know.
0
jkelly061597Author Commented:
How do I dynamically allocate my array?
0
nietodCommented:
for an array 100 objects of class "Cls" you would do

Cls *ClsAry = new Cls[100];

Note that the 100 does not have to be "hardcoded"  it could be a variable.  This allows you to allocate arrays of whatever size you determine you need at run-time.

Are you familar with using "new" and "delete"?
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
RONSLOWCommented:
to dynamically alocate you create an array of POINTERS to your class objects (allocate with new or malloc or stl classes or whatever) and then for each entry, use new to allocate the objects and store pointers to the in the array.  You need to be careful when doing things like removing elements or copying them.  If not, you can end up with dangling pointers or inaccessible objects.

Techniques like smart pointers can help you manage your objects without you needing to anything (much) special in your code.


0
nietodCommented:
Roger, is that just for jkelly's additional edification.  Or is there some evidence that I missed that he wants an arrray of pointers.
0
RONSLOWCommented:
if he wants to take advantage of dynamic storage to avoid using up stack space, then creating the class objects on the heap and storing pointers only in the array should help.

0
RONSLOWCommented:
Alternatively, there are dynamic array classes in the standard stl library that could do the trick.  Does Turbo C++ 4.5 have STL support?

0
chensuCommented:
I am sure Turbo C++ 4.5 does not support C++ template.
0
chensuCommented:
jkelly,

Have you tried what I suggested?
0
RONSLOWCommented:
In that case, without STL (and templates) if Jeff wants to make use of dynamic allocation, he would be better allocating the objects with new and storing pointers to them in a dynamic array (can you malloc/realloc/free to do the dynamic array).

He should probably wrap this dynamic array in a class so that he can control the allocation, freeing, copying etc of the array and its elements.


0
jkelly061597Author Commented:
When I created a static array rather than automatic I was able to avoid the overflow...

I'm trying to tweek the code withyour given info...

---

Is this the proper use of delete:

delete my_array;
0
nietodCommented:
Yes, but only in my_array was allocated with new, like

int *my_array = new int;

If my_array was allocated with new [], then use delete [], like

int *my_arrray = new int[10];
delete [] my_array;

If my_array is not dynamically allocated, that is, it is global, local, or static don't use delete or delete[]!
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
C++

From novice to tech pro — start learning today.