Ver Mensaje Individual
  #2 (permalink)  
Antiguo 19/06/2006, 20:14
Nivel7
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años, 8 meses
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.