E' pieno di errori, prima di fare la funzione index_max_bucket devi provvedere a correggere questi errori (alcuni sono gravi, tipo quando confronti un doppio puntatore con un intero).
Te li ho segnati:

codice:
#include <stdio.h>
#include <stdlib.h>

typedef struct int_list{
    
    int info;
    struct int_list *next;
    
} int_list;

//Definizione della struttura hast_table - NON MODIFICARE
typedef struct hash_table{
    
    //vettore di puntatori a lista di interi
    int_list **h_table;
    
    //dimensione del vettore di puntatori h_table
    int t_size;
    
    //numero di elementi contenuti nella tabella
    int n_elem;
    
} hash_table;

/*
 Funzione di creazione ed inizializzazione di una tabella hash.
 
 La funzione prende in input la dimensione del vettore di puntatori della tabella da creare e restituisce
 il puntatore alla struttura hash_table allocata.
 
 La funzione deve:
 
 - Allocare la zona di memoria per la struttura hash_table
 - Allocare il vettore di puntatori a int_list della hash_table
 - Inizializzare i puntatori del vettore a NULL
 - Inizializzare t_size a size e n_elem a 0.
 
 */
hash_table * create_hash_table(int size){
    
    hash_table* ht = (hash_table*)malloc(sizeof(hash_table));
    ht->h_table = (int_list **)malloc(sizeof(int_list *) * size);
    int i; 
    for (i = 0; i < size; i++) 
        ht->h_table[i]=NULL;
    ht->t_size=size;
    ht->n_elem=0;
    //  non ritorni alcun valore 
}

/*
 Funzione di inserimento nella tabella hash.
 
 La funzione prende ininput la hash_table ed il valore intero da inserire.
 
 La funzione deve:
 
 - Allocare una zona di memoria per il nuovo elemento della lista
 - Porre il valore info dell'elemento allocato ad x
 - Inserire l'elemento IN TESTA alla lista con indice hash(x,ht)
 - Aggiornare n_elem 
 */
void insert(hash_table *ht, int x){
    int i = hash(x, ht);   
    int_list *new_element = malloc(sizeof(int_list));
    new_element->info = x;
    new_element->next = ht->h_table[i];
    ht->h_table[i] = new_element;
    ht->n_elem++;
    
}

/*
 Funzione di eliminazione delle occorrenze di un valore
 
 La funzione prende in input la tabella hash ed il valore da eliminare
 
 La funzione deve:
 
 - Rimuovere tutti gli elementi con valore x dalla tabella. Tali elementi, se esistono, si troveranno nel bucket con indice h(x,ht)
 - Aggiornare n_elem
 
 Ricordarsi di deallocare la memoria degli elementi rimossi.
 */
void delete(hash_table *ht, int x)
{
    int i,j;
    for (i=0; i< ht->n_elem;i++) 
    {
        if (ht->h_table==x) // x + un intero, ht->h_table è di tipo int_list**, cosa vuoi fare?
        {
            for (j = i +1; i < ht->n_elem; i++) 
            {
                ht->h_table[j-1] = ht->h_table[j];
            }
            ht->n_elem--;
        }
    }
} // mancava la graffa
PS: Per non stare a leggere tutto il codice, puoi dirmi in maniera breve come hai implementato la hash table?