Hola.
Tal como lo he entendido, la cuestion es que haces la inicializacion de un vector de surfaces en el main, y el problema esta al hacer esto mismo desde una funcion no? En ese caso el unico problema que te puede dar es que pases el array como un paso por variable, no por referencia, es decir:
Si en la funcion que inicializa dichas surfaces fuese algo parecido a:
void fun (..., SDL_Surface * vector_de_surfaces [10],...){...}
se crearía un NUEVO array temporal a la funcion "fun", copiandose todos los elementos, se inicializaría dentro de la funcion pero no cambiaría nada en el método que la llama. Por lo tanto no tendría asignado memoria el array images y daría error al intentar acceder a los elementos. El problema se solucionaría poniendo como prototipo:
void fun (..., const SDL_Surface ** vector_de_surfaces ,...){...}
por lo que se pasaría un puntero constante, no un vector.
Otra cosa que me asusta del código es que si alguna carga de imagenes falla, simplemente se notifica de ello y sigue ejecutandose el programa, lo cual puede conllevar un acceso a alguna imagen no inicializada (ya que es un puntero a NULL) y, en cualquier caso, la liberación de "surfaces" que apuntan a Null.
Merry Christmas & a happy new year a todos!