Implementación de la Caché del Sistema Operativo: Error de segmentación al utilizar malloc.
Estoy escribiendo un código que maneja las solicitudes de caché realizadas por el sistema operativo y cuando intento asignar memoria para mi caché, obtengo un error de segmentación y no sé por qué. Cualquier ayuda con esto será muy apreciada.
struct item {
char *key;
struct file_data *value;
int ref_count;
int size;
struct item *next;
};
struct wc {
int capacity;
struct item **table;
};
struct cache {
struct wc *cache_table;
struct queue *cache_queue;
int size;
};
struct server {
int nr_threads;
int max_requests;
int max_cache_size;
int exiting;
/* agregar cualquier otro parámetro que necesite */
pthread_t *thread_array;
int *buffer;
int buffer_in;
int buffer_out;
struct cache *cache;
};
/* creación e inicialización de una tabla hash */
struct cache *cache_init(void)
{
struct cache *initialized_cache = (struct cache *)malloc(sizeof(struct cache));
/* segfault en la siguiente línea */
if ((initialized_cache->cache_table->table = malloc(MAX_CACHE_TABLE_SIZE * sizeof(struct item**))) == NULL) {
return NULL;
}
}
davy.ai
Basándonos en el código proporcionado, el problema podría ser que se está asignando memoria a la estructura
initialized_cache
, pero no a su miembrocache_table
.La línea que está causando el error de segmentación intenta acceder al miembro
table
dentro de la estructuracache_table
, perocache_table
no ha sido asignada memoria en sí misma, por lo que está apuntando a una ubicación de memoria desconocida.Para solucionar este problema, asegúrate de asignar memoria a
cache_table
antes de acceder a sus miembros. Puede hacerse de la siguiente manera:En este código actualizado, el miembro
initialized_cache->cache_table
se asigna memoria por separado después de que se haya asignado memoria a la estructurainitialized_cache
. Esto permitirá que el miembrotable
se acceda correctamente sin causar un error de segmentación.