See if CW provides (or can be made to provide) a MAP file. Examine that to see how the memory is allocated.
Memory is usually taken up with (in order) the Interrupt Vectors, Code, Data, BSS, Heap and Stack.
The "heap" is what Malloc uses. It and the Stack usually share all the remaining memory. Somewhere in the project you have to tell CW how much to allocate for the Stack, with the remaining usually being for the Heap. If your Stack is too big (or somehow the project is set for no heap) then that might explain your problem.