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

Asiganado datos a apuntadores a char

Estas en el tema de Asiganado datos a apuntadores a char en el foro de C/C++ en Foros del Web. Hola, Quiero asignar datos a un doble apuntador a char, primero asignando memoria para un arreglo de apuntadores a char y luego a cada apuntador ...
  #1 (permalink)  
Antiguo 19/06/2006, 18:47
 
Fecha de Ingreso: enero-2006
Mensajes: 5
Antigüedad: 18 años, 3 meses
Puntos: 0
Asiganado datos a apuntadores a char

Hola,

Quiero asignar datos a un doble apuntador a char, primero asignando memoria para un arreglo de apuntadores a char y luego a cada apuntador asiganarle memoria para que apunte a una cadena. El codigo quedo así, compila pero al momento de leer la información del arreglo previamente llenado, truena.

void ObtenDiasInHabiles (char *fecha)
{

int cont = 0;
int regTot = 0;
char **registros;
char *registro;


registros = (char **)malloc(salida.num_reg_enc*(sizeof(char *)));
for (cont = 0 ; cont < salida.num_reg_enc ; cont++)
{
registro = (char *)malloc( (strlen(salida.registro) + 1)*sizeof(char));
memcpy(registro, salida.registro, 12);

registros[regTot] = (char *)malloc((strlen(registro)+1)*sizeof(char) );
registros[regTot] = registro;
regTot++;
}

for (cont = 0 ; cont < regTot ; cont++)
{
/*-- Cuando trato de leerlo aqui, truena -*/-
fprintf (stdout, "Registros D [%d] [%s]\n", cont, registros[cont]);
}

}

De antemano agradezco su apoyo,

ICE Gerapo
  #2 (permalink)  
Antiguo 19/06/2006, 20:14
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años
Puntos: 2
for (cont = 0 ; cont < salida.num_reg_enc ; cont++)
{
registro = (char *)malloc( (strlen(salida.registro) + 1)*sizeof(char));
memcpy(registro, salida.registro, 12);

registros[regTot] = (char *)malloc((strlen(registro)+1)*sizeof(char) );
registros[regTot] = registro;
regTot++;
}

en esta seccion puedo ver unos errores.

el puntero registro le asignas memoria reservada una y otra vez dentro del bucle for, sin antes eliminar la memoria reservada en el ciclo previo.

podrias no hacerlo ya que la memoria la asignas al indice activo de del array registros.
para esto no tienes reservar memoria para el este indice.

registros = (char **)malloc(salida.num_reg_enc*(sizeof(char *)));
for (cont = 0 ; cont < salida.num_reg_enc ; cont++)
{
registro = (char *)malloc( (strlen(salida.registro) + 1)*sizeof(char));
memcpy(registro, salida.registro, 12);
registros[regTot] = registro;
regTot++;
}

lo malo de esto es que tanto registro como el ultimo indice de registros compartitían la misma sona de memoria, algo no muy bueno de manejar.

por que mejor no reduces tu codigo a esto:

registros = (char **)malloc(salida.num_reg_enc*(sizeof(char *)));
for (cont = 0 ; cont < salida.num_reg_enc ; cont++)
{
registros[regTot] = (char *)malloc( (strlen(salida.registro) + 1)*sizeof(char));
memcpy(registros[regTot], salida.registro, 12);
regTot++;
}

esto tal vez funcione mejor ya que hay menor manejo de asignaciones entre punteros.

la variable regTot, no la podrias sustituir solo por el contador(cont)??.

verifica eso un poco, y no olvides deshacerte de la memoria reservada.


Saludos.
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 01:22.