|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Nov 2012
Messaggi: 4
|
HELP! puntatori in c++
Salve a tutti i sto provando a realizzare l'algoritmo di ricerca calcolata utilizzando le linked-list
il programma prende dei dati strutturati e li ordina in un tabella hash ogni elemento dell'hash e un puntatore a la testa di una linked-list. il mio è un problema di segmentetion fault ho capito + o - deve sta l'errore ma non riesco a risolverlo : nella funzione hash appena provo a lavorare su ptr[] va in segmentetion fault qualcuno che ha un pò di dimistichezza con i puntatori può aiutarmi please !!! Codice:
#include <iostream> using namespace std; struct archivio { unsigned int key; char nome[20]; struct archivio *next; }; typedef struct archivio *archivioPtr; void inizializza(archivioPtr *,int); int hash(archivioPtr *,int ,archivioPtr ); archivioPtr hash_search(archivioPtr *,int ,unsigned int); int main(int argc, char **argv) { archivioPtr a,*b=NULL,trovato; int n,chiave; cout << "Quanti nomi vuoi inserire nell'archivio ? : "; cin >>n; a = new archivio [n]; for(int i=0; i<n; i++) { cout << "Inserire chiave : "; cin >>a[i].key; cout << "Inserire nome : "; cin >> a[i].nome; a[i].next=NULL; } inizializza(b,n); for(int i=0; i<n; i++) hash(b,n,&a[i]); cout << "Inserisci la chiave da cercare : "; cin >> chiave; if((trovato=hash_search(b,n,chiave))!=NULL) cout << "La chiave "<< chiave << "e' stata trovata nell'archivio il nome e' "<< trovato->nome<<endl; else cout << "La chiave non e' stata trovata."<<endl; cout <<"Premere invio per terminare il programma _ _ _ "; cin.get(); return 0; } void inizializza(archivioPtr *ptr,int dim) { ptr = new archivioPtr [dim]; for (int i=0; i<dim; i++) { ptr[i] = NULL; } } int hash(archivioPtr *ptr,int dim,archivioPtr info) { int k; archivioPtr current,previous; k= info->key % dim; if(ptr[k] == NULL) { ptr[k]=info; } else { current=ptr[k]->next; while(current!=NULL) { previous=current; current=current->next; } } previous->next=info; return 0; } archivioPtr hash_search(archivioPtr *ptr,int dim,unsigned int key) { int pos; archivioPtr current; pos=key%dim; if(ptr[pos]->key==key) return ptr[pos]; else { current=ptr[pos]->next; while(current!=NULL && current->key!=key) current=current->next; } return current; } Grazie in anticipo per le risposte mi rendo conto che è un problema difficile ma propio nn so come risolvere visto che non mi da errori di compilazione. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:35.