| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
unestudiante
Registrado: 21 Ene 2014 Mensajes: 1 Ubicación: ESPAÑA
| Publicado: 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: 139
| Publicado: 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  _________________ Aprendiendo |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |