Problemas para expandir una matriz en C ++

Estoy escribiendo una simulación para la clase, y parte de ella involucra la reproducción de organismos. Mis organismos se mantienen en una matriz, y necesito aumentar el tamaño de la matriz cuando se reproducen. Como tengo varias clases para varios organismos, utilicé una plantilla:

template <class orgType>
void expandarray(orgType* oldarray, int& numitems, int reproductioncount)
{
    orgType *newarray = new orgType[numitems+reproductioncount];

    for (int i=0; i<numitems; i++) {
        newarray[i] = oldarray[i];
    }

    numitems += reproductioncount;

    delete[] oldarray;
    oldarray = newarray;
    newarray = NULL;
}

Sin embargo, esta plantilla parece estar de alguna manera corrompiendo mis datos. Puedo ejecutar bien el programa sin reproducción (comentando las llamadas a expandarray), pero llamar a esta función hace que mi programa se bloquee. El programa no se bloquea DURANTE la función expandarray, pero se bloquea al violar el acceso más adelante.

He escrito funciones para expandir una matriz cientos de veces, y no tengo idea de lo que arruiné esta vez. ¿Hay algo descaradamente mal en mi función? ¿Te parece bien?

EDITAR: Gracias por la ayuda de todos. No puedo creer que me haya perdido algo tan obvio. En respuesta al usostd::vector: aún no lo hemos discutido en clase, y por tonto que parezca, necesito escribir código usando los métodos que nos han enseñado.

Respuestas a la pregunta(3)

Su respuesta a la pregunta