1

I'm working from an example piece of code that allocates a relatively large local array. (32768 to be precise) When I try the same I'm getting behaviour that appears to be a stack overflow. Now I was wondering if my example has maybe set the stack to be larger then my application. Is this possible? if so how?

nneonneo
  • 162,933
  • 34
  • 285
  • 360
Adam Naylor
  • 5,974
  • 10
  • 48
  • 68
  • Just a point on Semantics, "call stack" usually refers to the list of functions that make up the context for a function call. The memory valid for the context of a call is simply the stack. – RedBlueThing Mar 09 '09 at 08:55
  • Actually, the term 'stack' is an outdated term. 'Call stack' encompasses the entire context of the current call (ie local variables and parameters) see http://www.programmingforums.org/thread8786.html#9 – Adam Naylor Mar 09 '09 at 09:35

4 Answers4

4

With the Microsoft compiler you can use /F to set the stack size, however it seems like you should just allocate the object on the heap. You should have a reason you're allocating this on the stack rather than the heap.

Edit: This page gives a good cross-platform breakdown, though it may be dated.

bk138
  • 2,882
  • 1
  • 31
  • 25
i_am_jorf
  • 52,428
  • 15
  • 126
  • 218
  • This is was very helpful, although it didn't fix the problem. Further investigation needed :( – Adam Naylor Mar 09 '09 at 08:54
  • Maybe you should post a sample of your code in a new question. – i_am_jorf Mar 09 '09 at 09:14
  • http://stackoverflow.com/questions/614842/why-does-this-code-corrupt-memory, already answered but setting the stack size hasn't fixed the problem so your thoughts would be appreciated – Adam Naylor Mar 09 '09 at 09:43
1

You can use the /F compiler flag to set the default stack size, or specify it as the second parameter to the CreateThread function.

1800 INFORMATION
  • 125,607
  • 29
  • 156
  • 237
0

You could create a new thread for this work. You can generally specify the size of the stack when creating a thread, and certainly with vs2008's CreateThread() function

zeromus
  • 1,582
  • 12
  • 14
0

Rather than mess with with the stack size, why don't you simply use a std::vector or even dynamically allocate an array yourself?