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

[SOLUCIONADO] Copiar un vector de punteros a otro y lugo borrarlo

Estas en el tema de Copiar un vector de punteros a otro y lugo borrarlo en el foro de C/C++ en Foros del Web. Hola a todos. Estoy haciendo un programa que me han pedido en la universidad y me ha surgido un problemilla que no recuerdo exactamente como ...
  #1 (permalink)  
Antiguo 05/09/2014, 12:36
Avatar de dryant  
Fecha de Ingreso: agosto-2009
Ubicación: Malaga, Ceuta, España....
Mensajes: 283
Antigüedad: 15 años, 3 meses
Puntos: 10
Copiar un vector de punteros a otro y lugo borrarlo

Hola a todos.

Estoy haciendo un programa que me han pedido en la universidad y me ha surgido un problemilla que no recuerdo exactamente como se hacía.

Tengo un vector de punteros a punteros de caracter llamado carpetas1 y quiero copiar en él otro vector igual que se llama c1 y que tiene n bloques (un bloque menos que el que necesito)

Código:
//Creamos otros vectores para guardar los datos
						
	char ** carpetas1=0	
						
//Asignamos la memoria necesaria
						
	carpetas1 = new char* [n+1];
Entonces yo que le hago es copiarlo así:

Código:
for (int m=0; m<n; m++) {
	carpetas1[m] = c1[m];
}
y luego borro el vector que ya no me vale:

Código:
delete [] c1;
Ya me han explicado el error: Borro el puntero al cual esta apuntando el vector que necesito, pero ahora lo que no me acuerdo es como debería copiar un vector en otro y luego poder borrar el otro sin problema.

Alguien podría ayudarme?

Muchas gracias
__________________
Tecnología y tutoriales
  #2 (permalink)  
Antiguo 05/09/2014, 14:11
 
Fecha de Ingreso: julio-2012
Mensajes: 133
Antigüedad: 12 años, 4 meses
Puntos: 22
Respuesta: Copiar un vector de punteros a otro y lugo borrarlo

Hola dryant.
Cita:
Iniciado por dryant Ver Mensaje
...pero ahora lo que no me acuerdo es como debería copiar un vector en otro y luego poder borrar el otro sin problema.
Siendo iguales ambos arreglos, podrías hacer:
Código C++:
Ver original
  1. ...
  2.   memcpy(carpetas, c1, (n+1) * sizeof(c1));
  3.   delete [] c1;
Saludos.
  #3 (permalink)  
Antiguo 05/09/2014, 14:17
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 12 años, 3 meses
Puntos: 83
Respuesta: Copiar un vector de punteros a otro y lugo borrarlo

Puedes determinar el tamaño de c1 y reservar un bloque de ese tamaño, luego copias directamente c1 a ese bloque y ya lo tienes, algo asi:

Código C++:
Ver original
  1. int sz = 0, sx = 0;
  2. for(int m = 0; m < n; m++) {
  3.     //sz += (strlen(c1[m]));
  4.     sz += (strlen(c1[m]) + 1);//*nota*
  5. }
  6. sx = (sizeof(char *));
  7.  
  8. carpetas1 = new char* [sz + sx];
  9. memcpy(carpetas1, c1, sz);
  10.  
  11. delete [] c1;
  12. c1 = 0;
  13.  
  14. //ok ya tienes una copia de c1 mas un espacio libre en carpetas1[n]

*nota* En esta linea puedes preservar el \0 del final de char* en caso de que exista, si en c1 no hay \0 final no debes preservarlo, esto depende de como lo implementes.

Recuerda que para cada new necesitas un delete.

Si estas intentado ampliar la memoria y vas a trabajar con char* tal vez te resulte mas util usar malloc y realloc sobre un unico vector. Desconozco si en c++ hay un equivalente a realloc, seria question de echarle un vistazo.

Saludos
vosk
  #4 (permalink)  
Antiguo 05/09/2014, 14:18
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 12 años, 3 meses
Puntos: 83
Respuesta: Copiar un vector de punteros a otro y lugo borrarlo

@ecfisa perdona, colgaste el post mientras estaba escribiendo y no lo vi, la idea es la misma

Saludos
vosk
  #5 (permalink)  
Antiguo 05/09/2014, 16:41
 
Fecha de Ingreso: julio-2012
Mensajes: 133
Antigüedad: 12 años, 4 meses
Puntos: 22
Respuesta: Copiar un vector de punteros a otro y lugo borrarlo

Cita:
Iniciado por vosk Ver Mensaje
@ecfisa perdona, colgaste el post mientras estaba escribiendo y no lo vi, la idea es la misma

Saludos
vosk
Hola vosk.

No tenes por que disculparte, tu ejemplo está mas completo.

Saludos
  #6 (permalink)  
Antiguo 06/09/2014, 02:17
Avatar de dryant  
Fecha de Ingreso: agosto-2009
Ubicación: Malaga, Ceuta, España....
Mensajes: 283
Antigüedad: 15 años, 3 meses
Puntos: 10
Respuesta: Copiar un vector de punteros a otro y lugo borrarlo

Gracias a Ambos!

Me ha funcionado perfectamente!

Saludos!
__________________
Tecnología y tutoriales

Etiquetas: int, programa, puntero, punteros, vector
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 13:12.