Antes de liberar un array que contiene instacias de objetos, deberías recorrerlo y liberar cada objeto contenido.
Código Delphi
[-]
for i := 0 to LargoDe(VInstanciasAux) -1 do
VInstanciasAux[i].Free;
VInstanciasAux:=nil;
Lo mismo vale para cuando cambias el tamaña a uno menor. Deberías recorrer la parte "sobrante" liberando objetos antes de aplicar el nuevo tamaño.