A simple vista no veo nada raro. Tal vez el error se encuentra en el código Create de TCategoria. Pon ese código para checarlo.
Por otro lado, te recomendaría mejor que uses un TList para guardar las Categorias que vas leyendo.
Código Delphi
[-]
cCategorias: TList;
cCategorias := TList.Create;
cCategorias.Add(Categoria);
Categoria := TCategoria(cCategorias[0]);
Con esto te evitas estar redimencionando el arreglo cada vez que quieras agregarle una categoria.
Saludos...
P.D.: Cuando pongas cualquier código entre las etiquetas [ code ], [ delphi ], etc, trata de cortarlas "manualmente" usando saltos de línea para que sea más legible...