Newsgroup: it.comp.lang.c
Titolo: array di puntatori di tipo BYTE

ciao, ho creato un array di puntatori di tipo BYTE e devo scrivere una
funzione che inserisca nuovi vettori all'ultimo della lista, ma prima deve
controllare se esiste gia' un vettore identico a quello che sto per
inserire, se e' cosi' non lo devo inserire ed uscire dalla procedura
l'array l'ho dichiarato cosi':
BYTE *lista[200];
la funzione l'ho dichiarata cosi':
void Aggiungi(BYTE **btLista, BYTE *pointer, unsigned int nMax);
nella main ho creato tre vettori di cui due uguali per vedere se se
neaccorge che due sono uguali, ma nulla da fare!!!
void main(void)
{
    BYTE buffer[8];
 lista[0] = NULL;
 buffer[0] = 0xff;
 buffer[1] = 0xff;
 buffer[2] = 0xf5;
 buffer[3] = 0x05;
 buffer[4] = 0x01;
 buffer[5] = 0x00;
 buffer[6] = 0x02;
 buffer[7] = 0x04;
 Aggiungi(lista, buffer, 8);
 buffer[0] = 0xff;
 buffer[1] = 0xff;
 buffer[2] = 0xf5;
 buffer[3] = 0x05;
 buffer[4] = 0x03;
 buffer[5] = 0x00;
 buffer[6] = 0x02;
 buffer[7] = 0x04;
 Aggiungi(lista, buffer, 8);
  buffer[0] = 0xff;  // questo vettore e' uguale al primo
 buffer[1] = 0xff;
 buffer[2] = 0xf5;
 buffer[3] = 0x05;
 buffer[4] = 0x01;
 buffer[5] = 0x00;
 buffer[6] = 0x02;
 buffer[7] = 0x04;
 Aggiungi(lista, buffer, 8);
}
ecco come ho implementato la funzione:
void Aggiungi(BYTE **lista, BYTE *pointer, unsigned int nMax)
{
     int i = 0;
     int y = 0;
     bool bFound = false;
     BYTE *b = NULL;
     BYTE *p = NULL;
     BYTE *elemento = NULL;
     // fino alla fine della lista
     while(*lista)
    {
      p = *lista;
      // confronto se gia' esiste una voce simile
      while(y < nMax)
      {
           if (p[y] == pointer[y])
           {
                p++;
                pointer++;
                bFound = true;
                y++;
           }
           else
           {
                bFound= false;
                break;
           }
      }
      if (bFound) // c'era uh doppione e si esce
      {
           return;
      }
      lista++;
      i++;
     }
    // la lista e' vuota
     y=0;
     lista = &b;
     while(y < nMax)
     {
          b = pointer;
          b++;
          pointer++;
          y++;
     }
 }
// il primo errore e' che la lista e' sempre vuota, eppure io memorizzo il
contenuto di b in lista, ho provato con il debug e sia lista che b che
pointer hanno lostesso valore...
chi puo' dirmi dove sono gli errori che sto diventando matto, e' una
giornata che provo a capirli...
ciao e grazie in anticipo!!!


Prova se con queste modifiche funziona.
Ciao
D.M.
--------------------------------
Inviato via 
http://usenet.libero.it

 Prova se con queste modifiche funziona.
Continuera' a non funzionare perche'
while(*lista)
non e' soddisfatto, visto che *lista vale NULL (oltre al fatto
che il "C" di true e false non ne ha alba).
C:\>iao Angelo 
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 che il "C" di true e false non ne ha alba).
Non l'ho provato (adesso non posso, magari lo faccio stasera), per cui non
so dirti con certezza, pero' questa osservazione non mi sembra corretta.
La prima volta che viene chiamata la funzione Aggiungi *lista vale NULL, ma
dopo aver inserito il primo array, dovrebbe valere l'indirizzo dell'area di
memoria creata con la malloc e in cui e' stato copiato l'array.
Al termine del ciclo *lista==NULL, ma questo non significa che lista==NULL
!!!
Per quanto riguarda il true e false, ho supposto che sia stato dichiarato un
tipo bool come enum {false, true}.
DM


 so dirti con certezza, pero' questa osservazione non mi sembra corretta.
Ci sono ottime probabilita' che tu abbia ragione :-)
