erlug
[Top] [All Lists]

Re: [Erlug] ancora problemi

To: erlug@xxxxxxxxxxxxxx
Subject: Re: [Erlug] ancora problemi
From: "Ivan Sergio Borgonovo" <mail@xxxxxxxxxxxxxxx>
Date: Sat, 26 Oct 2002 21:52:04 +0200
On 26 Oct 2002 at 21:17, Simone Saravalli wrote:

> Ancora una volta ho dei problemi con le mie liste. Questa volta il
> problema è che dopo aver definito un nodo nella initSeq (è solo una
> prova, lo so che come esercizio è stupido) vorrei passare la mia
> mini-lista alla funzione show per visualizzare il valore contenuto in
> (s.scan)->dato, ma non ci riesco, in quanto la printf contenuta nella
> funzione initSeq, mostra il valore corretto (0, in questo caso), ma la
> funzione show mi dà un valore a caso. So che il problema risiede nel
> fatto che non passo il parametro alle due funzioni per riferimento,
> bensì per valore, ma avrei bisogno che qualcuno mi indicasse come si fa,

bravo...

> cosa sbaglio insomma. Scusate e sopportatemi 8-)

> Simone Saravalli
>
>
> #include <stdio.h>
> #include <stdlib.h>
>
> #define TRUE 1
> #define FALSE 0
>
> typedef int elem;
>
> typedef struct node {
>    elem dato;
>    struct node *next;
>    } item;
>
> typedef item *noderef;
>
> typedef struct record_scans {
>    char mode;
>    noderef ptr;
>    noderef scan;
>    } sequence;
>
> void initSequence (sequence s, char modo) {

oooops qui hai una bella copia locale di una sequence

>    s.mode=modo;
>    if (s.mode=='R') {
>       (s.ptr)=malloc(sizeof(struct node));
>       (s.ptr)->next=NULL;
>       (s.ptr)->dato=0;

qui assegni alla copia locale

>       s.scan=s.ptr;
>       }
>    printf ("%d ", (s.scan)->dato);   //qui il valore viene stampato

qui stampi il valore assegnato alla copia locale

> correttamente
>    }

qui la copia locale finisce di esistere con le sue assegnazioni.

> void show (sequence s) {
>    printf ("%d ", (s.scan)->dato);       //qui no, perchèèèè?
>    }
>
> main() {
>    sequence inSeq;
>    initSequence (inSeq, 'R');
>    show (inSeq);

qui cerchi di stampare una sequence che in realtà NON è mai stata
init(iata)... quella che è stata init(iata) è quella instanziata nella
dichiarazione della funzione proprio nella riga

> void initSequence (sequence s, char modo) {

P.S. e meno male che funziona così...

>    return 0;
>    }


--
Salve
Ivan Sergio Borgonovo
http://www.webthatworks.it/
uniq life || sleep 24h


<Prev in Thread] Current Thread [Next in Thread>