Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente bannato
    Registrato dal
    Jun 2003
    Messaggi
    3,657

    Problema con indirizzo di struct

    codice:
    if (j==PatternSize && modello[j-1]!='2')
    		{
    			Pattern nuovoPattern= init();
    			nuovoPattern.modello=modello;
    			nuovoPattern.frequenza++;
    			//se non ci sono altri elementi nella lista, allora questo diventa il primo elemento nella lista
    			if (elem==0)
    			{
    				lista=&nuovoPattern;
    				prec=lista;
    			}
    			else
    			{
    				//altrimento lo accodo agli altri
    				cout<<hex<<&nuovoPattern<<"\n";
    				prec->next=&nuovoPattern;
    				//nuovoPattern.prev=prec;
    				prec=&nuovoPattern;
    			}
    			elem++
    		}
    vedete il cout<<hex<<&nuovoPattern<<"\n"; ?

    bene, mi aspetterei che ad ogni iterazione, mi visualizzasse un indirizzo diverso, visto che nuovoPattern viene generato ogni volta, invece mi da sempre lo stesso indirizzo...l'intendo è di fare una lista, infatti la struct contiene

    char *modello
    int frequenza
    Pattern *next
    Pattern *prev

    next contiene l'indirizzo del successivo, prev l'indirizzo del precedente..

    prec non è altro che l'indirizzo del precedente e vorrei mettere nuovoPattern nel puntatore next dell'ultimo elemento della lista ad ogni iterazione.

    perché mi da un indirizzo uguale?

    0xbff6211c
    0xbff6211c
    0xbff6211c
    0xbff6211c
    0xbff6211c
    0xbff6211c

    e altre decine di righe così...

    vi ringrazio

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    codice:
    bene, mi aspetterei che ad ogni iterazione, mi visualizzasse un indirizzo diverso, visto che nuovoPattern viene generato ogni volta, invece mi da sempre lo stesso indirizzo...l'intendo è di fare una lista, infatti la struct contiene
    Veramente

    Pattern nuovoPattern

    e' una variabile locale al blocco if in cui e' dichiarata e in quanto tale, viene distrutta all'uscita dal blocco. Quando viene ricreata, e' abbastanza probabile che abbia lo stesso indirizzo.

    Forse c'e' qualcosa che non va in questo codice ... infatti assegni il puntatore di una variabile che viene distrutta e questo non e' bello ...

  3. #3
    Utente bannato
    Registrato dal
    Jun 2003
    Messaggi
    3,657
    Originariamente inviato da oregon
    codice:
    bene, mi aspetterei che ad ogni iterazione, mi visualizzasse un indirizzo diverso, visto che nuovoPattern viene generato ogni volta, invece mi da sempre lo stesso indirizzo...l'intendo è di fare una lista, infatti la struct contiene

    Forse c'e' qualcosa che non va in questo codice ... infatti assegni il puntatore di una variabile che viene distrutta e questo non e' bello ...
    ti sbagli...io assegno l'indirizzo in un if annidato...quindi non è sbagliato...

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Originariamente inviato da FinalFantasy
    io assegno l'indirizzo in un if annidato...quindi non è sbagliato...
    E che importanza ha? Appena esce dalla seconda if la variabile non esiste piu' ... e' un errore ...

  5. #5
    Utente bannato
    Registrato dal
    Jun 2003
    Messaggi
    3,657
    Originariamente inviato da oregon
    E che importanza ha? Appena esce dalla seconda if la variabile non esiste piu' ... e' un errore ...
    mi potresti evidenziare la variabile interessata e l'errore?

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Te lo avevo detto prima ... comunque

    codice:
    if (j==PatternSize && modello[j-1]!='2')
    {
       Pattern nuovoPattern = init();
       nuovoPattern.modello=modello;
       nuovoPattern.frequenza++;
       //se non ci sono altri elementi nella lista, allora questo diventa il primo elemento nella lista
       if (elem==0)
       {
          lista=&nuovoPattern;
          prec=lista;
       }
       else
       {
          //altrimento lo accodo agli altri
          cout<<hex<<&nuovoPattern<<"\n";
          prec->next=&nuovoPattern;
          //nuovoPattern.prev=prec;
          prec=&nuovoPattern;
       }
    
       elem++
    }

  7. #7
    Utente bannato
    Registrato dal
    Jun 2003
    Messaggi
    3,657
    Originariamente inviato da oregon
    Te lo avevo detto prima ... comunque
    e quindi? scusami...non voglio contraddirti

    La variabile che dici tu, a questo scope

    codice:
    1. if (j==PatternSize && modello[j-1]!='2')
    2. {
    3.   Pattern nuovoPattern = init();
    4.   nuovoPattern.modello=modello;
    5.   nuovoPattern.frequenza++;
    6.   //se non ci sono altri elementi nella lista, allora questo diventa il primo elemento nella lista
    7.   if (elem==0)
    8.   {
    9.      lista=&nuovoPattern;
    10.      prec=lista;
    11.   }
    12.   else
    13.   {
    14.      //altrimento lo accodo agli altri
    15.      cout<<hex<<&nuovoPattern<<"\n";
    16.      prec->next=&nuovoPattern;
    17.      //nuovoPattern.prev=prec;
    18.      prec=&nuovoPattern;
    19.   }
    20.
    21.   elem++
    22.}
    la variabile ke dici tu, ha lo scope che va da riga 4 a riga 21, oltre esce dall'if...quindi non vedo dove sta questo "presunto errore"...

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Oltre la riga 22 esiste ancora la variabile prec?

  9. #9
    Utente bannato
    Registrato dal
    Jun 2003
    Messaggi
    3,657
    certo!!!!

    l'ho dikiarata all'inizio della funzione

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    E quindi dopo la riga 22 esiste la variabile

    prec

    che punta (o che contiene un puntatore prec->next) a qualcosa che non esiste piu' ...

    Per capirci ...

    1) prima della riga 1 dichiari la variabile prec (presumo) come puntatore alla struttura Pattern;

    2) all'interno del blocco dichiari la variabile nuovoPattern e la inizializzi;

    3) assegni alla prec (o alla prec->next, a seconda dei casi) il puntatore a nuovoPattern; (e lo fai anche con la variabile list ...);

    4) all'uscita del blocco la variabile nuovoPattern non esiste piu';

    5) le variabili prec e lista (oppure l'elemento prec->next) puntano ad una struttura che non esiste piu' (ovvero che non e' allocata) ...

    Ecco qual e' l'errore di cui ti sto dicendo da un po' ...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.