Ver Mensaje Individual
  #2 (permalink)  
Antiguo 20/09/2012, 13:09
vosk
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 12 años, 3 meses
Puntos: 83
Respuesta: Pasar arreglo por valor

La solucion unica que existe es la que has encontrado por ti mismo: si la funcion no modifica los valores que recibe entonces no tienes problema en enviar punteros de los elementos del vector ya que no los vas a modificar; si la funcion modifica los valores pero no puedes modificar los originales entonces solo te queda la opcion de duplicar esos elementos, ya sea fuera de la funcion (tal como en la solucion que has encontrado) o dentro de ella (es decir enviar punteros a elementos del vector y duplicarlos). A menos que tengas alguna orden de no usar memoria dinamica, la solucion que encontraste es buena. Otra solucion consiste en crear tu propio memory pool, aunque no veo en este caso que sea solucion ya que tendras que usar tus propias funciones de malloc y free de memoria usada.

Una cosa, por que te molesta gastar esa memoria? Seguramente puedes encontrar por ahí algun programa que te indique la carga de memória que está usando tu programa, comprueba que a causa de esas mallocs no se dispare; si la memoria usada no es nada del otro mundo no tienes que tener problemas con ello, no? Otra cosa, acuerdate de usar las comprovaciones de error.

Una tercera observacion: si estas seguro que cada vez solo vas a duplicar un numero definido de elementos (uno, dos, veinte, es igual) y que no estas usando multiples procesos, puedes guardar una lista de elemento duplicados de forma que para la primera duplicacion usaras un malloc y para las siguientes un realloc, es mejor eso que un bucle de malloc-free

Saludos
vosk