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 :
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;
}
Funzione INSERT_KEY:
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);
}
Quest'ultima è la funzione chiamata alla fine del main il cui scopo sarebbe quello di deallocare la struttura realizzata:
Funzione CHE DEALLOCA:
codice:
void Free_Arr(Heap_A *A){
int i=(A->size)-1;
while(i>=0){
free((A->first)+i);
i--;
}
}
E' chiamata alla fine del main in questo modo : Free_Arr(A);
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;