On 08/04/2008, David Adam david.adam.cnrs@gmail.com wrote:
- This->current = This->current +1;
- HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, This->matrix, (This->current +1) * sizeof(D3DXMATRIX) );
- if ( This->matrix == NULL ) return E_OUTOFMEMORY;
Aside from being a bit suboptimal (doing a realloc on every push), this probably doesn't do what you want. Consider what happens to the size of the array when you do something like push/pop/push/pop/...etc.
It would be better to keep track of the current stack size, and then grow it by a factor (eg. 2 or 1.5) if a push would overflow the current stack. You could also consider shrinking the array again if a pop would make it use less than a certain percentage of the current size (eg. a third).
You should also assign the result of HeapReAlloc() to This->matrix again. Although it's quite possible for HeapReAlloc to just grow the current block without changing its location, there's no guarantee it will. The NULL check is useless this way.