Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    353

    C - creazione albero con strutture

    Avendo una struttura
    contenente 3 stringhe (ID,Nome e Cognome)
    Dovrei creare un albero binario di ricerca con questa struttura ,ma all' inserimento da segmentation fault
    codice:
    struct nodo *inserisci (struct nodo *radice,struct nodo *ins) {
    struct nodo *aux;
    
          if(radice==NULL) {
          aux= (nodo *)malloc(sizeof(struct nodo));
          if(aux) {
           strcpy(aux->id,ins->id);
         strcpy(aux->nome,ins->nome);
         strcpy(aux->cognome,ins->cognome);
    
        aux->sinistro= aux->destro= NULL;
        return aux;}}
    
         if (strcmp(radice->id,ins->id)<0)
         radice->sinistro = inserisci(radice->sinistro,ins);
         if(strcmp(radice->id,ins->id)>0)
         radice->destro = inserisci(radice->destro,ins );
    
    
    
       return aux;}
    Cosa dimentico ,o tratto in maniera errata?
    Grazie in anticipo

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Facci vedere anche le strutture, il main e la chiamata della funzione ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    353
    intanto grazie

    codice:
    struct nodo {
       char id[21];
       char nome[41];
       char cognome[41];
       struct nodo *sinistro, *destro;
    };

    nel main
    [CODE]
    struct nodo *a;
    struct nodo *r;
    struct nodo *i;

    r=inserisci(a,i);

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Quindi il nodo che inserisci, non esiste ... C'e' solo il puntatore i ma non la memoria allocata a cui punta ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    353
    sono all' inizi su queste strutture dati,mi puoi dire come modificare?

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Non è una questione di strutture ma di allocazione dinamica.

    Devi usare la malloc con il puntatore i così come lo hai fatto per

    aux= (nodo *)malloc(sizeof(struct nodo));
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    353
    no, ok,intendevo "strutture dati" come alberi,
    dov' è però che la devo usare,a ogni inserimento dal main?
    grazie ancora

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Originariamente inviato da CodiceProg
    dov' è però che la devo usare
    Ad esempio, tra queste righe

    struct nodo *i;

    r=inserisci(a,i);

    dato che hai un puntatore che usi senza avere allocato la struttura ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    353
    ancora grazie,quindi
    codice:
    i= (nodo *)malloc(sizeof(struct nodo));
    a= (nodo *)malloc(sizeof(struct nodo));
    Per il resto è corretto?

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Originariamente inviato da CodiceProg
    quindi
    No ...

    Questa è la radice e quindi va scritto semplicemente

    codice:
    struct nodo *a = NULL;
    mentre per quella che inserisci va bene l'allocazione, ma dato che devi inserire un nodo, avrai un Nome e un Cognome da inserire, no? Quindi, ad esempio

    codice:
    i = (nodo *)malloc(sizeof(struct nodo));
    strcpy(i->id, "1");
    strcpy(i->nome, "ROSSI");
    strcpy(i->cognome, "PAOLO");
    e dopo l'inserimento, dovrai liberare la memoria ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.