Witajcie, mam pewien problem z funkcją przeszukującą listę dwukierunkową i wyświetlającą elementy wyszukiwania. Piszę ją w C++ Builderze. Przejdę do rzeczy, oto komponenty, których używam:

ListBox1
Edit1

i klasy osoba, która ma wiele składowych, ale tutaj najważniejsza (względem niej szukamy) jest składowa nazwa, która jest typu string

i mam dwie funkcje:

 
void __fastcall TForm1::Edit1KeyUp(TObject *Sender, WORD &Key, TShiftState Shift)
{
  osoba **szukane=0; //wskaźnik do tablicy wskaźników, w której będą adresy wyszukanych obiektów z listy dwukierunkowej
  if(osoba::ilosc_kontaktow()>1) //gdy jeden kontakt, nie wyszukujemy, ile_kontaktow() to funkcja statyczna, która podaje długość listy
  {
      szukane=szukaj(GLOWA, Edit1->Text.c_str()); //GLOWA-początek listy, zmienna globalna, do funkcji szukaj wysyłam oprócz GLOWY jest zawartość komponentu Edit1
      if(szukane[0]) //jeśli coś wyszukano
      {
          ListBox1->Items->Clear(); //czyścimy ListBoxa, gdyby wcześniej coś w nim bylo
          int j=0;
          while(szukane[j]) // wpisujemy zwartość tablicy do ListBoxa
          {
              ListBox1->Items->Add((szukane[j++]->nazwa).c_str());
              j++;
          }
      }
  }
}

i teraz funkcja szukająca:

osoba **szukaj(osoba *temp, string nazwa)
{
 osoba *(*tab)=0;
 int k=osoba::ilosc_kontaktow(); //k - długość listy

 tab=new osoba*[k]; //dynamicznie tworzę tablicę wskaźników i przypisuję ją do **tab, tablica ma rozmiar taki, ile jest kontaktów

 for(int i=0; i<k; i++) //wypełniam ją zerami
     tab[i]=0;

 int i=0;
 while(temp!=0)
 {
     if(AnsiPos(nazwa.c_str(), temp->nazwa.c_str())) //funkcja AnsiPos zwraca 0, jeśli pierwszy argument nie jest częścią drugiego (chodzi o string)
         tab[i++]=temp;
     temp=temp->nastepny;
 }

 return tab;
}

chodziło mi o stworzenie "dynamicznej wyszukiwarki", jednak nie wiem dlaczego, nie działa czasami, siedzę już nad tym i nie widzę błędu, może ktoś z forum mi pomoże, byłbym wdzięczny...