Visualizzazione dei risultati da 1 a 3 su 3

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2010
    Messaggi
    152

    [C] Problemi di deallocazione (signal SIGTRAP)

    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;

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2010
    Messaggi
    152
    Ragazzi, mi restituisce un SIGTRAP nel momento in cui un attimo prima della fine dell'esecuzione viene chiamata la funzione che dealloca, c'è qualcuno che sa scovare il problema ?

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2010
    Messaggi
    152
    Qualche buon anima che scova perchè mi da questo"Segmentation Fault" ?
    Faccio notare che se ho un solo elemento non da alcun problema, questi iniziano a nascere nel momento in cui ho più di un elemento.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.