Salve ragazzi, ho creato il seguente tipo di dati:

codice:
#define STEP_GRAFO 100 

typedef struct grafo
{
        NODO **archi;
        int PrimoLibero;
        int NumNodi;
        int N_Max;
        void **dizionario;
        NODO *FreeList;
        // eventuali f di callback
} GRAFO;
ed ho la seguente funzione InitG per inizializzare il grafo:

codice:
GRAFO *InitG(GRAFO *G)
{
      int i;
      
      G = (GRAFO*)malloc(sizeof(GRAFO));
      G->NumNodi = 0;
      G->PrimoLibero = 0;
      G->N_Max = STEP_GRAFO;
      G->archi = (NODO**)malloc(sizeof(NODO) * G->N_Max);
      G->dizionario = (void**)malloc(sizeof(void*) * G->N_Max );
      
      // inizializzazione necessaria 
      for ( i = 0; i < G->N_Max; i++ )
          G->dizionario[i] = NULL;
      
      // inizializzazione necessaria 
      for ( i = 0; i < G->N_Max; i++ )
          G->archi[i] = NULL;
      
      G->FreeList = NULL;
      
      return G;
}
Adesso devo fare in modo tale che, qualora ho:

codice:
if ( G->NumNodi == G->N_Max )
{
    // devo effettuare la realloc;
    // riallocando G->archi di + STEP_NODO(cioè 100);
}
Qualcuno può aiutarmi?

Inoltre nella init ho dovuto per forza inizializzare tutto a NULL altrimenti se facevo controlli del tipo:

G->dizionario[i] == NULL, mi si bloccava! (provando a stampare, stampava valori sporchi, e penso sia normale. Quindi è giusto inizializzare a null?? Lo domando poichè un mio amico mi ha detto che quando alloco con la malloc in automatico viene settato tutto a NULL, penso si sbagliava).