/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

DUDA TABLA HASING

 
      Índice del Foro elrincondelc.com -> C/C++ en General
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
unestudiante



Registrado: 21 Ene 2014
Mensajes: 1
Ubicación: ESPAÑA

MensajePublicado: 21/01/2014 2:57 pm
Título: DUDA TABLA HASING

Hola a todos, soy un estudiante y me han mandado a realizar varios algoritmos de hasing, que no he tenido ningún problema excepto en este, que tengo algún problema con la asignación dinámica de memoria.

Tengo esta estructura:

typedef struct s_persona {//Defino la estructura
char id[13];
char nombre[25];
char email[25];
int edad;
char company[25];
}t_base;
t_base tabla_hash[64];

....la cual inicio aqui:

void iniciar (){

t_base *t;
int i;

t=(t_base *)malloc(N_ELEMENTOS*sizeof(t_base)); // RESERVO EL ESPACIO DE MEMORIA
if (t==NULL)
printf("Memoria insuficiente.");

for (i=0;i<N_ELEMENTOS;i++){//INICIALIZO LA TABLA A VALORES VACIOS
printf("%d\n", i);
strcpy(tabla_hash[i].id ,LIBRE_CHAR);
strcpy(tabla_hash[i].nombre ,LIBRE_CHAR);
strcpy(tabla_hash[i].email ,LIBRE_CHAR);
tabla_hash[i].edad= LIBRE_INT;
strcpy(tabla_hash[i].company ,LIBRE_CHAR);
}



printf("Tabla iniciada");
}

El problema es que a la función iniciar(), el tamaño de la tabla hash va cambiando y lo voy aumentando y llamo a la tabla hash para que me reinicie todos los valores pero cuando llega a 304, me casca.

Alguien tiene alguna idea??

Muchas gracias de antemano.
_________________
Un estudiante en busca de ayuda
Volver arriba
dehm



Registrado: 29 Abr 2011
Mensajes: 143

MensajePublicado: 23/01/2014 2:57 am
Título:

No sé si me he enterado bien del problema, pero....¿estas usando la función iniciar() para darle unos valores predefinidos a cada integrante de tabla_hash[64]?

Por decir algo...N_ELEMENTOS es igual a 64, supongo. Si no por ahí podría venir el problema.

Por otro lado, ¿que valores guardan LIBRE_INT y sobre todo LIBRE_CHAR?
Prueba a poner "" en lugar de LIBRE_CHAR o a asignar el valor "" a LIBRE_CHAR.

Otra cosa...si lo que quieres es darle unos valores concretos a los integrantes de tabla_hash[64] entonces vale, pero si lo que quieres es iniciar cualquier valor del tipo t_base, deberías hacerlo por medio del constructor, no por medio de una función.

Y por último, en la función iniciar() declaras un puntero y parece que lo quieres usar para almacenar memoria para los 64 valores de tabla_hash, pero no hace falta hacer esa reserva de memoria, pues al declarar

Código:
t_base tabla_hash[64];


el compilador ya se encarga de esa función.

Te pongo algo que te puede ayudar. En este caso se ha usado el constructor para inicializar cada valor del struct.
Código:
typedef struct s_persona  //Defino la estructura
{
    char id[13];
    char nombre[25];
    char email[25];
    int edad;
    char company[25];
    s_persona()
    {
        strcpy(id ,"miId");
        strcpy(nombre ,"miNombre");
        strcpy(email ,"miEmail");
        edad= 0;
        strcpy(company ,"miempresa");
    }
} t_base;
t_base tabla_hash[N_ELEMENTOS];


int main()
{
   printf (tabla_hash[21].email);
   printf (tabla_hash[45].company);
    return 0;
}


Saludos Wink
_________________
Aprendiendo
Volver arriba
      Índice del Foro elrincondelc.com -> C/C++ en General
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com