Napisałem taki program:

/*==============================================================================
system operacyjny: Windows XP Home
kompilator:        Dev-C++ 4.9.9.2
===============================================================================*/

/*------------------------------------------------------------------------------
Program demonstruje dzialanie algorytmu DFS w zastosowaniu do sortowania 
topologicznego grafu. 
-Wykorzystuje reprezentacje listowa grafu. 
-Posiada 3 zestawy danych wejsciowych w tym jeden zestaw to graf z cyklem.
-------------------------------------------------------------------------------*/

#include <iostream>
#include <string>
using namespace std;
typedef struct TNode //pojedynczy element lisy
{
 int node;            // numer wierzchołka
 struct TNode * next; // następny element listy
};

class CGraph           //klasa slurzaca do reprezentacji grafu w postaci ist sasiedztwa
{
   unsigned V,E;       // ilosc wierzcholkow i krawedzi
   int wmax;           //wierzcholek o maksymalnym numerze 
   int nTS;
   int color[100], tab[100];//tabele pomocnicze   
   bool isDAG;         //zmienna pomocnicza do wykrywania cykli 
   TNode **GLists, *p;     // tablica wskazników na listy wierzchołków
  
//*******************************************************//
   public:

   CGraph(unsigned _V);
    ~CGraph();
     void Insert(unsigned v,unsigned u);
     void Show(void);//wyswietla graf w postaci tablicy list
     void DFS(int v);//algorytm przeszukiwania DFS
     void wsTOP(void);//sortowanie topologiczne grafu

};
//==========================================================
//-------------konstruktor----------------------------------
CGraph::CGraph(unsigned _V) : V(_V)
{  
  isDAG = true;                                        
  wmax=0;
  GLists = new TNode*[V];
  for(int i=0;i<V;++i) GLists[i]=NULL,color[i]=0, tab[i]=0 ;
}
//-------------destruktor----------------------------------
CGraph:: ~CGraph()
{
TNode *tmp;
int i=0;
while(GLists[i])
  {
    while(p->next)
    {
        tmp=p->next;
        p->next=p->next->next;
        delete tmp;
    }
    delete GLists[i];
    i++;
  }
}
//--------------Insert----------------------------------
void CGraph::Insert(unsigned v,unsigned u)
{
    wmax = (v > wmax) ? v : wmax;// ustawianie wartosci wmax na najwiekszy numer wierzchoka 
    wmax = (u > wmax) ? u : wmax;

        color[v]= 1;//wszystkie dodawane wierzcholki sa numerowne jedynkami
        color[u]= 1;

    p = new TNode;
    p->next = GLists[v];
    p->node = u; 
    GLists[v] = p;
}
//---------Show----------------------------------------------
void CGraph::Show(void)
{
 for(int i = 1; i <= wmax; i++)
 {
   cout << i << ":";
   p = GLists[i];
   while(p)
   {
     cout << p->node << " ";
     p = p->next;
   }
   cout << endl;
 }
 cout<<"\n\n";
}

//-------------------------DFS--------------------------------------------------
void CGraph::DFS(int i)
{   
  color[i] = 2;//wierzcholkowi aktualnie przetwarzanemu zmieniany jest przypisany przy Insercie numer 1 na 2
  //wskaznik do glowy listy
  while(p)
  {
    switch(color[p->node])
    {
      case 2 : isDAG = false; return ;//zostal wykryty cykl w grafie
      case 1 : DFS(p->node);//rekurencyjne wywolanie
                     if(!isDAG) return ;
                     break;
    }
    p = p->next;
  }
  color[i] = 3;//wierzcholkowi przetworzonemu zmieniany jest przypisany numer z 2 na 3
  tab[nTS++] = i;//wierzcholek dodawany jest na stos   

}

//-----------wsTOP-----------------------------------------
void CGraph::wsTOP(void)
{ 
  for(int i = 1; i <= wmax; i++)
  {
    if(color[i] == 1)
    {           
       DFS(i);
       if(!isDAG) break;
    }
   }
//efekt sortowania topologicznego jest wyswietlany
  if(!isDAG) cout << "wykryto cykl";//komunikat o wykrutym cyklu
  else for(int i = nTS - 1; i >= 0; i--) cout << tab[i] << " ";//zdejmowanie ze stosu

}

//==============================================================================
int main()
{
    

//-----zestaw danych wejsciowych nr. 2--------------
CGraph Obiekt(50);
cout<<"graf zbudowany jest z nastepujacych galezi:\n 1,2\n 1,6\n 2,5\n 2,4\n 3,2\n 3,4\n 3,5\n 4,6\n 6,5\n\n";
Obiekt.Insert(1,2);
Obiekt.Insert(1,6);
Obiekt.Insert(2,5);
Obiekt.Insert(2,4);
Obiekt.Insert(3,2);
Obiekt.Insert(3,4);
Obiekt.Insert(3,5);
Obiekt.Insert(4,6);
Obiekt.Insert(6,5);
cout<<"---Listowa reprezentacja grafu---"<<endl; 
Obiekt.Show();
cout<<"---efekt sortowania topologicznego---\n"<<endl;
Obiekt.wsTOP();
cout<<"\n\n\n";
    


system("PAUSE");
}

I wszystko fajnie działa ale gdy chce stworzyć drugi obiekt typu CGraph program sie wysypuje.
Co dziwne nawet jak chce zadeklarować zmienną np. int w main() przed "Obiektem" wywoanie
metody "Obiekt.wsTOP()" kończy sie niepowodzeniem. Gdy uruchamiam program pod Linuxem metoda wsTOP() wcale nie działa.
Co może być tego przyczyną?