The size of a frame on the stack is roughly the sum of the sizes of the parameters passed in plus the sum of the sizes of the local variables. There is also a little extra for the return address, base pointer, and perhaps some guard cookies for checking stack overruns.
Example:
int foo(int x, int y, char *string) {
int array[10000];
// ...
}
Integers in VC++ are 4 bytes each. A pointer is 4 bytes in a 32-bit executable, or 8 bytes in a 64-bit executable. So the parameters add up to 4+4+8. The local array is 40,000 bytes. This function consumes roughly 40 KB of stack. You could add up a lot of those before you overrun the stack.
An actual stack overflow in a Windows program generally only happens with runaway recursion. The default stack size is pretty large (1 MB). You can get stack corruption by overrunning a buffer that's on the stack.
Chances are your crash has to do with accessing an array beyond its bounds or accessing through a pointer that isn't pointing to valid memory (e.g., a NULL pointer).