Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Pasar arreglo por valor

Estas en el tema de Pasar arreglo por valor en el foro de C/C++ en Foros del Web. Intentaré ser lo más claro posible. He programado una función en C que recibe y opera sobre vectores los que son pasados usando punteros. Mi ...
  #1 (permalink)  
Antiguo 20/09/2012, 11:48
 
Fecha de Ingreso: septiembre-2012
Ubicación: Valparaíso
Mensajes: 1
Antigüedad: 11 años, 10 meses
Puntos: 0
Pasar arreglo por valor

Intentaré ser lo más claro posible. He programado una función en C que recibe y opera sobre vectores los que son pasados usando punteros. Mi consulta viene del hecho que no deseo alterar el contenido de los vectores, pues realmente son parte de un esquema iterativo.

Actualmente estoy copiando los vectores en memoria alocada via un malloc, y esos los estoy pasando a mi función que desarrolla los cálculos. Pero realmente me molesta tener que "gastar" ésta memoria. Espero que mi consulta no sea muy boba puedo darles más detalles si necesitan, les agradezco mucho de antemano.

Un abrazo,
Felipe.
  #2 (permalink)  
Antiguo 20/09/2012, 13:09
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 11 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
  #3 (permalink)  
Antiguo 21/09/2012, 01:59
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 14 años, 1 mes
Puntos: 73
Respuesta: Pasar arreglo por valor

Si asignas memoria mediante malloc para guardar una copia del vector original, asegúrate de liberarla con free cuando ya no la necesites. Dado que se trata de un esquema iterativo, no es difícil agotar la memoria disponible si no tienes cuidado con el proceso de asignación/liberación de memoria.

Etiquetas: puntero, arreglos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:41.