Hola David!! a ver si te puedo ayudar un poco.
La verdad que no veo porque te hace pero creo saber como optimizar un poquito tu codigo y talvez por aca venga el problema.
Lo que veo es que mientras que el la lista tenga datos siempre redimencionas el Array, te recomiendo esto!
antes del while
Código Delphi
[-]
If not zlistas.isempty then
SetLength(arrDirecciones,zlistas.RecodCount);
i:=0;
While .......
....
....
arrDirecciones[i]:= .......
Inc(i);
Zlistas.next;
.....
Por ultimo Inmagino que el ArrDirecciones lo utilizas en algun otro lado.
estas seguro que no lo estas Limpiando, o Re direccionando en alguna otra llamada?
Saludos y suerte