Newsgroup: it.comp.lang.c
Titolo: LISTE. un bug nteressante da analizzare, chiedo aiuto

Salve di nuovo! ancora una volta ho un problema irrisolto.
Il problema si è posto nel momento in cui ho voluto sostituire nella testa
di una linked list una struttura al posto di un  dato fisso, quale un int.
Le librerie precedenti, che andavano benissimo si sono rivelate inutili,
creando stranissimo bug  a run-time da far pensare che l'errore possa essere
non nelle funzioni ma nel modo in cui ho architettato il tutto... non avendo
testi sull'argomento a cui riferirmi.
Il listato seguente è FACILISSIMO da comprendere..
/******LISTE.C******/
typedef struct Elem{
 char nome[10];
 int anni;
}Elem;
//questa sopra è la struttura incriminata di aver creato tutti i problemi.
//Infatti:
//al posto di un INT nella SOTTOSTANTE struttura , ho messo la struttura
//sopra, che contiene un tral'altro un int e un vett di char; modificando
//a dovere le funzioni che ne facevano uso.
typedef struct List{
 Elem el;//el è passato da INT ad Elem
 struct List* next;
}List;
typedef List* Listptr;//puntatore alla lista
/********MAIN*******/
void main(){
 Elem strut;
strcpy(strut.nome,"VSO");
strut.anni=4;
 Listptr Lst;
 Lst=buildlist(strut);
 stampa(Lst);
 }
/***********/
Listptr consL(Elem El,Listptr L){
Listptr R;
if((R=(Listptr)malloc(sizeof(List)))==NULL){printf("õError in cos!\n");
exit(1);
}
R->el=El;
R->next=L;
return R;
}
/***********/
int null(Listptr L){
if(L==NULL) return 1;
else return 0;
}
/************/
Elem head(Listptr L){
if(null(L)){
printf("Accesso a lista vuota ..module HEAD!");
exit(1);
}
return L->el;
}
/*************/
Listptr tail(Listptr L){
if(null(L)){
printf("Accesso a lista vuota ..module TAIL!");
exit(1);
}
return L->next;
}
/*************/
void stampa(Listptr L){
while(!null(L)){
 printf("\nnome...%s",(head(L)).nome);
 printf("\neta'...%d",(head(L)).anni);
 L=tail(L);
 }
}
/***************/
Listptr buildlist(Elem el){
Listptr List;
for(int i=0;i<3;i++){
 List=consL(el,List);
 }
return List;
}
/***********END LISTE.C******/
Questo è quanto!
Riguardo al bug: Il bug si presenta sotto varie forme, ma il più comune è
quello di stampare 4 o 5 teste quando ne ho definite solo 2 oppure non
stampare correttamente gli anni...
ho cercato di dilungarmi il più possibile per evitare incomprensioni
sul problema. Se lo provate a fare girare includento gi "#include"
all'inizio, dovreste capire meglio il BUG.Il compilatore da me usato è
TurboC++ DOS ver.3.0
Come vedete non sembra, almeno per me, esserci errore.
SMENTITEMI COME AL SOLITO! :)
Saluti di nuovo.
P.S. Una domanda... ma le varianti FAR di alcune funzioni nel TURBOC++ dos
fanno uso della modalità protetta?. Non direi...
Vincenzo"«v§o»"Antolini
vin...@mailte.topnet.it
van...@tin.it

fanno uso della modalità protetta?. Non direi...
No.
Servono solo per i modelli di memoria piu' grandi.
--------------------------------------------------------
Andrea      
mica uno qualunque...
--------------------------------------------------------

Puoi scrivere un messaggio che contiene il programma senza commenti, in modo
che posso prenderlo e compilarlo senza dover fare il taglia e cuci?
Comunque da quello che dici, mi sembra che il tuo programma faccia dei guai
proprio con i puntatori, non so se il pronlema e' delle malloc o se c'e'
qualche errore di deferenziazione (mi pare che si dica cosi').
Puo' darsi che i puntatori puntino a delle strutture dati in aree di memoria
che non erano state assegnate allo scopo di contenere i tuoi dati, di solito
al 90% i casini avvengono per questo motivo quando si usano i puntatori.