Bien, si estás usando C++ y necesitas arrays de tamaño variable, deberías usar std::vector. La cosa se simplifica mucho, mira:
Lo primero, incluyes la libería:
#include <vector>
El vector se crea así:
std::vector<corredor> corredores;
Ahora mismo el vector tiene tamaño 0. Para incrementar su tamaño y a la vez añadir un elemento usas el método push_back:
corredor c;
c.dni = "Lo que sea";
c.carreras = 2;
corredores.push_back(corredor);
Cuando pases el vector como parámetro de una función no hace falta que incluyas el tamaño, pues el vector tiene un método que te permite conocerlo. De este modo, para iterar sobre un vector se pude hacer así:
for (int i = 0; i < corredores.size(); ++i) {
//Puedes hacer los cambios que quieras como si se tratase de cualquier otro array
corredores[i] = ;
}
Te recomendaría que le echases un vistazo tranquilamente a la clase vector, e intentases volver a escribir tu programa utilizandola. Si tienes algún problema o hay algo que no entiendes no dudes en publicarlo por aquí.
Un saludo
PD: Siento la tardanza, estaba sin ordenador