Ragazzi ho problemi con la deallocazione di una coda a priorità, vi posto il Main (dove ci sono i puntini si trova semplicemente l'inizializzazione delle callback) e vi posto le funzioni interessate.
Main :
Funzione INSERT_KEY:codice:int main(int argc, char *argv[]){ srand(time(NULL)); elem *vet,*m,*val; Heap_A *A; int n,i,choice,pos,prior; void *inf; function *f; A=Heap_Arr_Create(A); . . . A->buf=1; A->first=(elem *)malloc(sizeof(elem)); printf("\n Inserisci il dato : "); (A->first)->dato=f->Input(); (A->first)->prior=random(0,30); A->size++; break; } } do { system("cls"); printf("\n\n Scegliere il tipo di operazione da effettuare "); printf("\n (1) Inserire un nuovo elemento "); printf("\n (2) Stampa il valore massimo della coda a priorita' "); printf("\n (3) Estrai il valore massimo della coda a priorita' "); printf("\n (4) Stampa il contenuto della coda a priorita' "); printf("\n (5) Cancella un elemento dalla coda a priorita' "); printf("\n (6) Incrementa la priorita' di un dato "); printf("\n (7) Decrementa la priorita' di un dato "); printf("\n (0) Esci dall'esecuzione del programma "); printf("\n\n Tasto digitato : "); scanf("%d",&choice); getchar(); switch(choice){ case 1 : { val=(elem *)malloc(sizeof(elem)); printf("\n\n Inserisci elemento da inserire \n"); printf("\n Priorita' : "); scanf("%d",&(val->prior)); getchar(); printf(" Dato : "); val->dato=f->Input(); /*if((A->size)>=(A->buf)){ A->buf=(A->buf)*2; A->first=(elem *)realloc(A->first,A->buf*sizeof(elem)); }*/ Insert_key(A,val); break; }
Quest'ultima è la funzione chiamata alla fine del main il cui scopo sarebbe quello di deallocare la struttura realizzata:codice:void Insert_key(Heap_A *A,elem *val){ A->size++; if((A->size)>=(A->buf)){ A->buf=(A->buf)*2; A->first=(elem *)realloc(A->first,A->buf*sizeof(elem)); } (A->first+(A->size-1))->prior=INT_MIN; (A->first+(A->size-1))->dato=val->dato; Increase_key(A,(A->size-1),val->prior); free(val); }
Funzione CHE DEALLOCA:
E' chiamata alla fine del main in questo modo : Free_Arr(A);codice:void Free_Arr(Heap_A *A){ int i=(A->size)-1; while(i>=0){ free((A->first)+i); i--; } }
Ecco le due strutture utilizzate :
codice:struct elemento{ int prior; void *dato; }; typedef struct elemento elem; struct infor{ int size; //Grandezza dello heap int buf; //Dimensione del buffer struct elemento *first; }; typedef struct infor Heap_A;

Rispondi quotando