|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: May 2005
Messaggi: 5
|
MASSIMA URGENZA (per programmatori in C)
Aiutatemi vi prego, stasera mi scade la consegna di un esercizio all' universita e se non lo consegno probabile che non passero l' esame.
Dunque il problema è un po particolare, il compilatore dice : "dereferencing pointer to incomplete type". io sto usando una serie di strutture una dentro l' altra che vi mostro qui in seguito, la funzione riceve in input un puntatore alla strutturs piu esterna e io devo puntare quella piu interna, vi prego vedete voi se riuscite a scovare qualche errore: typedef struct tabelem{ //elemento char *key; void *info; }tabelem,*punta_elem; typedef struct telist{ //listone di elementi aggiunti non ordinati struct tabelem *el; struct telist *next; }telist,*listone; typedef struct NODE{ //nodo della lista della tavola struct tabelem *node_el; struct NODE *next; }NODE,*LISTA_NODE; typedef struct HASHTABLE{ //tavola hash (vettore di puntatori a NODO) struct NODE *vettore[MAX_LENGHT+1]; }HASHTABLE; typedef struct table{ struct HASHTABLE htable; struct telist *ls; }table,*punta_table; struct info_word { char *parola; int word_pos; int title; int italic; int bold; size word_size; char *file_link; int link_pos; }; struct elem_hitlist { struct info_word *info_occ_word; struct elem_hitlist *next_elem; }; struct elem_diz_loc { char *parola; struct elem_hitlist *hitlist; int dim; struct elem_diz_loc *next_word; }; struct info_link { struct tabelem *ptr_pagina; int molteplicita; struct info_link *next; }; struct info_ipertesto { struct info_link *lista_in; struct info_link *lista_out; struct elem_diz_loc *diz_loc; int page_rank; }; e la funzione è questa, void crea_diz_ipertesti(struct table *t){ // dichiarazioni FILE *pfile; int i=0; char *nfile; struct elem_diz_loc *DIZ; init_diz_iper(t); // inizializza le liste che conterranno // tutti i dizionari locali presenti in un file do{ strcpy(nfile,(t)->htable->vettore[i].elnodo->key); pfile=fopen(nfile,"r"); ((struct info_ipertesto *)t->htable->vettore[i].elnodo->info)->diz_loc=crea_diz_loc(DIZ,pfile); rewind(pfile); ((struct info_ipertesto *)t->htable->vettore[i].elnodo->info)->lista_in=crea_lista_in(t,i,pfile); rewind(pfile); ((struct info_ipertesto *)t->htable->vettore[i].elnodo->info)->lista_out=crea_lista_out(t,pfile); i++; fclose(pfile); }while(t->htable->vettore[i]!=NULL); |
![]() |
![]() |
![]() |
#2 |
Junior Member
Iscritto dal: May 2005
Messaggi: 5
|
qualche santo che mi aiuta?
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Mar 2005
Messaggi: 1653
|
Non sono granche' capace, ma se dai qualche info + dettagliata magari si riesce a capire meglio... Ad esempio, su quale riga o struttura o variabile il compilatore ti da' l'errore? In che ambiente stai programmando? Windows, *nix, ecc...
Una cosa che personalmente non ho mai fatto e' quella di fare una typedef definendo un tipo con nome_tipo e poi dichiarare una variabile con lo stesso nome nome_tipo.... Non so se si e' capito, in pratica se faccio Codice:
typedef unsigned short senza_segno; Codice:
senza_segno senza_segno; Codice:
typedef struct tabelem { ... } tabelem; Se qualcun altro da' il suo parere e mi corregge... Gica |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jun 2001
Città: Pordenone
Messaggi: 1216
|
Già, il modo in cui dichiari le variabili non è bellissimo per quanto concerne la leggibilità. Il programma poi, per l'amor di dio, potrebbe funzionare lo stesso. Difficilmente il problema sta li.
In ogni caso, buona cosa sarebbe che tu rispondessi alle domande che ti ha fatto Gica. Inoltre, che ci dicessi se ti da errore in una riga in particolare. E' comunque un errore di puntatori, da quanto si può capire dal messaggio che ti da. Non so alla fine, ma i puntatori che usi poi li cancelli? Provare a eseguire passo-passo il programma per vedere in quale punto accade l'errore? |
![]() |
![]() |
![]() |
#5 |
Junior Member
Iscritto dal: May 2005
Messaggi: 5
|
praticamente ogni volta che uso t mi da quell' errore di dereferenziamento.
lasciate perdere la logica del programma, se non sbaglio dovrebbe essere un errore di dichiarazione dei puntatori, credo. comunque grazie, spero che sappiate aiutarmi |
![]() |
![]() |
![]() |
#6 |
Junior Member
Iscritto dal: May 2005
Messaggi: 5
|
strano mi da lo stesso errore, scrivendo solamente :
t->htable->vettore[i]; |
![]() |
![]() |
![]() |
#7 |
Junior Member
Iscritto dal: May 2005
Messaggi: 5
|
tutto risolto grazie infinite lo stesso, fiuu che incubo è passato
|
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Mar 2005
Messaggi: 1653
|
Quote:
![]() ![]() Ad ogni modo, visto che non ho prestato moltissima attenzione ai dettagli, mi riveli (per pura curiosita') dove stava l'errore? Gica ![]() PS: in bocca al lupo per l'esame...
__________________
gica78r@ncc-1701:~$ tar -c tar: Codardamente mi rifiuto di creare un archivio vuoto ![]() |
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Mar 2005
Messaggi: 1653
|
Alla fine ieri notte non ho resistito e mi sono messo a riguradare la faccenda... Sistemando un po' di cose e compilando il codice, ho ricevuto degli errori relativi alle righe
Codice:
((struct info_ipertesto *)t->htable->vettore[i].elnodo->info)->diz_loc=crea_diz_loc(DIZ,pfile); ((struct info_ipertesto *)t->htable->vettore[i].elnodo->info)->lista_in=crea_lista_in(t,i,pfile); ((struct info_ipertesto *)t->htable->vettore[i].elnodo->info)->lista_out=crea_lista_out(t,pfile); ![]() Ciao, Gica
__________________
gica78r@ncc-1701:~$ tar -c tar: Codardamente mi rifiuto di creare un archivio vuoto ![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:27.