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).