Newsgroup: it.comp.lang.c++
Titolo: Funzione stampa da debuggare.

Salve.
Se ho sta struttura:
typedef int E;
struct Record;
typedef Record* L;
struct Record{
       E elem;
       L next;
};
e una funzione stampa del genere:
void stampa(const L& l){
     if(l!=0){
   L temp;
   cout << endl;
   for(temp=l;temp->next!=0;temp=temp->next){
    cout << temp->elem << " ";
   }
     }
     else cout << "\nImpossibile eseguire. Lista vuota.";
}
perché suddetta funzione non gira?
Grazie

    for(temp=l;temp->next!=0;temp=temp->next){
temp!=0 altrimento non stampi l'ultimo elemento.
Quello che hai postato e' bruttino, ma funziona....
<CODE>
#include<iostream>
using namespace std;
typedef int E;
struct Record;
typedef Record* L;
struct Record{
    E elem;
    L next;
};
void stampa(const L l){
    if(l!=0){
        L temp;
        cout << endl;
        for(temp=l;temp!=0;temp=temp->next){
            cout << temp->elem << " ";
        }
    }else cout << "\nImpossibile eseguire. Lista vuota.";
}
int main()
{
    L lista=new Record;
    lista->elem=4;
    lista->next=new Record;
    lista->next->elem=5;
    lista->next->next=0;
    stampa(lista);
    return 0;
}
</CODE>
Come previsto stampa: 4 5
La tua versione con il for sbagliato stampava solo 4, ma stampava....
Tu cosa sbagliavi?
Tommy

 }
ah, ovvio, i delete li ho omessi per brevita'.....
Tommy

 Quello che hai postato e' bruttino, ma funziona....
Beh come dire...prima imparo a farli girare...poi a raffinare il codice...
;-)

Non va anche come mi hai detto tu...
L'errore é sempre lo stesso:
"L'istruzione a ..... ha tentato di accedere alla area di memoria a .... La
memoria non poteva essere 'read'
Sto cominciando a pensare che non sia la stampa che non va...

 Sto cominciando a pensare che non sia la stampa che non va...
Sicuro?!?
Ora lo testo un attimo.....
[time....]
Da me funziona....
Hai fatto un copia-incolla del programma esattamente come l'ho postato?!?
Ad ogni modo quando ti dicevo che era un pochino bruttino intendevo in modo
particolare stampa, guarda come potrebbe essere semplice... (ah, scusa se ho
rimosso i vari typedef, ma non mi piacciono). (e poi i typedef ti hanno
fatto sbagliare con la storia dei reference..).
<CODE>
#include<iostream>
using namespace std;
struct Record{
    int elem;
    Record *next;
};
void stampa(Record* l){
    while(l){
        cout << l->elem << endl;
        l=l->next;
    }
}
int main()
{
    Record* lista=new Record;
    lista->elem=4;
    lista->next=new Record;
    lista->next->elem=5;
    lista->next->next=0;
    stampa(lista);
    return 0;
}
</CODE>
Anche questo codice dovrebbe funzionare. (oppure sono diventato orbo...)
Come al solito non ho fatto il delete ...
Tommy

 Hai fatto un copia-incolla del programma esattamente come l'ho postato?!?
Che main() stai usando? Mi sa tanto che tu abbia copiato la funzione con il
nuovo for dentro il tuo programma con il tuo main....
Il for modificato non toglie nessun errore, fa solo stampare anche l'ultimo
elemento.
Prova a copiare ed incollare esattamente tutto il codice che ti ho
postato,main() compreso, e fammi sapere se ti da errore o meno.
Poi, una volta fatta questa prova e risolto questo problema, puoi anche
guardare la funzione nuova con il while che ti ho appena postato.
Se l'errore e' nel tuo main(), postalo che ti dico cosa e' il problema.
Tommy

 problema.
Te l'ho mandato in mail...