20/01/2011, 06:39
|
| | Fecha de Ingreso: junio-2010 Ubicación: Madrid
Mensajes: 620
Antigüedad: 14 años, 5 meses Puntos: 73 | |
Respuesta: Liberar memoria En principio, por variables locales, la unica peligrosa podría ser
int copia_sistema_reparacion [tamanio_sistema_reparacion]
dependiendo, claro está, del valor tamanio_sistema_reparacion.
El problema puede proceder mas bien de la gran cantidad de parámetros que estás pasando a la funcion. La verdad es que ignoro si cuando pasas como parametro un array con su(s) dimension(es) te está pasando un puntero al primer elemento (como ocurre cuando pones solamente el nombre como puntero), o te genera una copia completa del array. Si es esto último, esa es casi seguro la fuente del problema.
Ademas convendría comprobar el nivel de recursión al que llega la función, si es muy alto podría llegar a desbordar la pila aunque en cada llamada se ocupe poco espacio. Prueba, simplemente, añadiendo un contador que se incremente y presente su valor tras cada entrada a la función, así podrás ver cuántas vueltas llevabas antes de que el programa casque (declara esa variable con el atributo static dentro de la función, algo asi como static int contador=0).
Sería conveniente (por el gran número de parámetros suministrados a la función) el agruparlos en estructuras de datos. Solamente habría que pasar un puntero por estructura, con lo que disminuye la cantidad de datos a meter en la pila cada vez, aunque en este caso podrías encontrarte con la necesidad de tener que crear y copiar la estructura completa antes de llamar a una nueva iteración, lo que puede afectar a la velocidad.
Por el momento no se me ocurre nada mas. Saludos, |