Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    156

    [C] quesito sulla deallocazione con free

    ho una lista concatenata avente come nodo radice il puntatore a struct root.
    Ad un certo punto voglio eliminare tutti i nodi della lista. Attraverso quindi la combinazione di un ciclo while e della chiamata alla funzione free, elimino tutti i nodi della lista.

    Alla fine di questa operazione il puntatore che ho utilizzato per la lista non punta a nulla oppure devo esplicitamente eseguire un assegnamento del tipo
    codice:
    root = NULL;
    ??

    Chiedo questo perchè una volta eliminati i nodi della lista, avrei bisogno di riutilizzare il puntatore per creare nuove liste; mi sono però accorto che se non assegno NULL al puntatore il programma crasha e mi ritorna una segmentation fault.
    I casi sono due: o io ho utilizzato male la free per cancellare la lista oppure la free non mi imposta il puntatore a NULL e devo farlo io esplicitamente...

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Il puntatore non deve essere necessariamente reimpostato a NULL (normalmente lo si fa per avere una situazione certa di partenza).

    Se hai fatto correttamente le varie free, allora non dovresti avere problemi.

    Evidentemente c'e' un problema nel tuo codice ...

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    156
    ok grazie... sicuramente è così visto che ho una lista allocata dinamicamente con un membro matrice allocato anch'esso in modo dinamico... il fatto è che la lista mi pare venga creata correttamente (riesco a svolgere tutte le operazioni di ricerca e ordinamento senza intoppi) quando però elimino la lista e ne creo una nuova iniziano i problemi...
    Se proprio non ne vengo a capo posterò il codice...
    Intanto grazie ancora...

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    156
    riporto il codice che ho utilizzato per deallocare la lista LS e la matrice dinamica membro della struttura di tipo Word membro della lista.

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct _word {
    	char word[SIZE_WRD];
    	char **tabS;
    	unsigned int len_wrd;
    	unsigned int num_syll;
    	unsigned int occurrences;
    	
    } Word;
    
    
    /*Puntatore a strutura*/
    typedef struct _LS{
    	Word found;
    	struct _LS *nextPt;
    } LS;
    
    typedef LS *LS_PT;
    
    
    /*elimino tutti i nodi della lista*/
    void delList (LS_PT root){
    	
    	LS_PT temp = NULL;
    	
    	while (root){
    		
    		temp = root;
    		
    		freeMatr (temp->found.tabS, temp->found.num_syll);
    		
    		free(temp);
    		
    		root = root->nextPt;
    	}
    	
    	return;
    }
    
    
    /*disalloco matrice*/
    void freeMatr (char **matrix, int len){
    	
    	int i;
    	
    	for (i = 0; i < len; i++)  free(matrix[i]);
    	
    	free(matrix);
    	
    	
    	return;
    }
    sempre che il problema sia qui...

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.